MySQL, select с условием по LIKE, как сделать сортировку по тому же порядку, что указан в LIKE?

Есть запрос
SELECT *
FROM users
WHERE name LIKE "%дмитрий%" OR
name LIKE "%елена%" OR
name LIKE "%мария%" OR

Нужно получить отсортированный результат в таком порядке
петров дмитрий иванович
иванова елена степановна
сидорова мария сергеевна

Т.е. чтобы сортировка была в том же порядке, в каком выстроен LIKE.
  • Вопрос задан
  • 5524 просмотра
Решения вопроса 1
BelCoder
@BelCoder Автор вопроса
php dev
SELECT *
FROM users
WHERE name LIKE "%дмитрий%" OR
name LIKE "%елена%" OR
name LIKE "%мария%" OR
ORDER BY
(name LIKE "%дмитрий%") DESC,
(name LIKE "%елена%") DESC,
(name LIKE "%мария%") DESC

Вот такой вариант сработал
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
begemot_sun
@begemot_sun
Программист в душе.
Вам нужно попробовать выполнить объединение запросов:

SELECT * FROM users WHERE name LIKE "%дмитрий%" 
UNION ALL
SELECT * FROM users WHERE name LIKE "%елена%" 
UNION ALL
SELECT * FROM users WHERE name LIKE "%мария%"
Ответ написан
Комментировать
Andkon13
@Andkon13
Как вариант есть способ через case, но вариант begemot_sun возможно отработает быстрее но на всякий случай:
SELECT *,
case
when name like '%дмитрий%' then 1
when name like '%елена%' then 2
when name like '%мария%' then 3
end as sort
FROM users
WHERE first_name LIKE "%дмитрий%" OR
first_name LIKE "%елена%" OR
first_name LIKE "%мария%"
order by sort
Ответ написан
Комментировать
svd71
@svd71
ПОпробуй так
<select
* from users
......
Order by substr( name, position ( ' ' in name )) asc

/code>
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы