unknown priority information_schema disable column_statistics column mysql sql order sql-like

mysql - priority - unknown table ''column_statistics'' in information_schema(1109)



Mysql: orden por como? (5)

Lea en Boolean Fulltext Searches , con el que puede hacer pedidos.

Supongamos que estamos realizando una búsqueda con palabras clave: keyword1, keyword2, keyword3

Hay registros en la base de datos con la columna "nombre":

1: John Doe 2: Samuel Doe 3: John Smith 4: Anna Smith

ahora consulta:

SELECT * FROM users WHERE (name LIKE "%John%" OR name LIKE "%Doe%")

seleccionará los registros: 1,2,3 (en este orden), pero quiero ordenarlos por palabra clave en el ejemplo keyword1=John, keyword2=Doe por lo que debería estar listado por palabras clave: 1,3,2 (porque quiero realizar la búsqueda de "Doe" después de buscar "John")

Estaba pensando en SELECT DISTINCT FROM (...... UNION .....) pero será mucho más fácil pedirlo de otra manera (la consulta real es realmente larga)

¿Hay algún truco para crear tal orden?


Mi ejemplo ordenará a todos los John ''s Alfabéticamente seguidos de los Doe '' s.

ORDER BY CASE WHEN name LIKE "John%Doe" THEN CONCAT(''a'',name) WHEN name LIKE "John%" THEN CONCAT(''b'',name) WHEN name LIKE "%Doe" THEN CONCAT(''c'',name) ELSE name END


Para aprovechar la respuesta de RedFilter, podría hacer que las filas que tienen ambas palabras clave estén en la parte superior:

order by case when (name LIKE "%John%" and name LIKE "%Doe%") then 1 when name LIKE "%John%" then 2 when name LIKE "%Doe%" then 3 end


order by case when name LIKE "%John%" then 1 when name LIKE "%Doe%" then 2 else 3 end


SELECT * from ( SELECT u.*, 1 OrderNum FROM users WHERE (name LIKE "%John%") UNION SELECT u.*, 2 OrderNum FROM users WHERE (name LIKE "%Doe%") ) Order by OrderNum