Подтвердить что ты не робот

Mysql: Порядок как?

предположим, что мы выполняем поиск по ключевым словам: 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 .....) но будет намного проще заказать его каким-то образом по-другому (реальный запрос действительно длинный)

Есть ли какие-либо трюки для создания такого порядка?

4b9b3361

Ответ 1

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

Ответ 3

 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

Ответ 4

Чтобы построить ответ 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

Ответ 5

Мой пример будет упорядочивать все 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