2010-08-16 13 views
5

Estoy seleccionar datos de una tabla en una de las 3 columnas coincide con una cadena determinada búsqueda:resultados Ordena por la columna de forma dinámica en función de dónde se encuentra una coincidencia

SELECT * 
FROM CARS 
WHERE MODEL LIKE searchString 
OR MANUFACTURER LIKE searchString 
OR DESCRIPTION LIKE searchString 

pero tengo que ordenar los resultados en función de donde se encontró el partido, basado en una ponderación de columna. Es decir. si la coincidencia se encontró en la columna MODELO, la fila debería aparecer más arriba en los resultados que si la coincidencia se encontrara en la columna FABRICANTE. Con la ponderación de 1-MODELO 2-FABRICANTE 3-DESCRIPCIÓN.

Toda ayuda muy apreciada, gracias!

Respuesta

4

de Oracle búsqueda de texto completo (FTS) functionaltiy - Oracle texto-- sería a la vez más rápido y proporcionar una puntuación de rango basado en el algoritmo que es ...

SELECT c.*, 
      CASE 
       WHEN c.model LIKE searchstring THEN 1 
       WHEN c.manufacturer LIKE searchstring THEN 2 
       WHEN c.description LIKE searchstring THEN 3 
      END AS match_rank 
    FROM CARS c 
    WHERE c.model LIKE searchstring 
     OR c.manufacturer LIKE searchstring 
     OR c.description LIKE searchstring 
ORDER BY match_rank 

Pero usted no menciona cómo manejar la clasificación si dos columnas más más coinciden ...

+0

la clasificación debe detenerse una vez que se ha encontrado una coincidencia. ¿Es esto tan simple como agregar un 'END' al final de cada declaración 'WHEN'? – essembee

+0

Acabo de darme cuenta de que una vez que se encuentra que una condición es verdadera, la declaración del caso devolverá el resultado y no evaluará más las condiciones. Entonces esto es perfecto, ¡salud! – essembee

+0

buena solución, pero compruebe el rendimiento en tablas grandes ... si devuelve todo, entonces no debería hacer una gran diferencia, solo el costo del tipo. Pero si se devuelve un subconjunto TOP (x), primero se debe ordenar toda la tabla por la coincidencia. Comprueba que el plan de ejecución se ajuste a tus necesidades. –

Cuestiones relacionadas