2009-10-19 10 views
34

Tengo alrededor de 20,000 filas en una tabla INNODB llamada 'tarjetas', por lo que FULLTEXT no es una opción.MySQL - ¿CÓMO HACER PEDIDOS POR RELEVANCIA? INNODB Tabla

Por favor considere esta tabla:

id  |  name  |  description 
---------------------------------------------------------- 
1  John Smith  Just some dude 
2  Ted Johnson  Another dude 
3  Johnathan Todd This guy too 
4  Susan Smith  Her too 
5  Sam John Bond And him 
6  John Smith  Same guy as num 1, another record 
7  John Adams  Last guy, promise 

Por lo tanto, decir que las búsquedas de los usuarios de 'John', quiero que el conjunto de resultados a estar en el orden de:

7  John Adams 
6  John Smith 
3  Johnathan Todd 
5  Sam John Bond 
2  Ted Johnson 

Tenga en cuenta que nosotros Solo hemos sacado 'John Smith' una vez, tomamos su entrada más reciente. Debido a mis datos, todos los nombres son para la misma persona exacta, no hay necesidad de preocuparse por 2 tipos diferentes llamados John Smith. Ideas? Avísame si puedo aclarar algo.

+1

Usted parece querer ordenar por "Apellido, nombre", no por relevancia (sin embargo se define que). ¿Es esto correcto? – Tomalak

Respuesta

110

versión 1:

SELECT max(id) id, name 
    FROM cards 
WHERE name like '%John%' 
GROUP BY name 
ORDER BY CASE WHEN name like 'John %' THEN 0 
       WHEN name like 'John%' THEN 1 
       WHEN name like '% John%' THEN 2 
       ELSE 3 
      END, name 

versión 2:

SELECT max(id) id, name 
    FROM cards 
WHERE name like '%John%' 
GROUP BY name 
ORDER BY CASE WHEN name like 'John%' THEN 0 
       WHEN name like '% %John% %' THEN 1 
       WHEN name like '%John' THEN 2 
       ELSE 3 
      END, name 
+0

¡Impresionante! Eso funciona exactamente como yo quería. Gracias najmeddine! – k00k

+1

contento de ayudar. Lo modifiqué un poco para manejar más casos. – manji

+0

Creo que el otro camino funciona mejor en mi caso específico, pero ambos pueden ser útiles para otros, ¿puedes ponerlos allí por el bien de la posteridad? – k00k

Cuestiones relacionadas