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