Ответ 1
order by case
when name LIKE "%John%" then 1
when name LIKE "%Doe%" then 2
else 3
end
предположим, что мы выполняем поиск по ключевым словам: keyword1, keyword2, keyword3
в базе данных есть записи с столбцом "name":
1: John Doe 2: Samuel Doe 3: John Smith 4: Anna Smith
теперь Запрос:
SELECT * FROM users WHERE (name LIKE "%John%" OR name LIKE "%Doe%")
он выберет записи: 1,2,3 (в этом порядке)
но я хочу заказать его по ключевому слову
в примере keyword1=John, keyword2=Doe
поэтому он должен быть указан по ключевым словам: 1,3,2 (потому что я хочу выполнить поиск "Doe" после поиска "John" )
Я думал о SELECT DISTINCT FROM (...... UNION .....)
но будет намного проще заказать его каким-то образом по-другому (реальный запрос действительно длинный)
Есть ли какие-либо трюки для создания такого порядка?
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
Чтобы построить ответ RedFilter, вы можете сделать строки с двумя ключевыми словами:
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
Мой пример будет упорядочивать все John
по алфавиту, а затем Doe
.
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