Заказать несколько ИЛИ Mysql - PullRequest
0 голосов
/ 19 марта 2019

У меня есть этот запрос, который я хочу вернуть в определенном порядке

SELECT idperson, name
FROM movie.people
WHERE idperson LIKE '23'
OR idperson LIKE '1'
OR idperson LIKE '24'
OR idperson LIKE '25'
OR idperson LIKE '26'
OR idperson LIKE '27'
OR idperson LIKE '28'
OR idperson LIKE '29'

Есть ли способ, которым я могу вернуть результат в следующем порядке: LIKE, OR, OR, OR и т. Д.?Или прикрепить какое-либо значение к LIKE и OR как «порядок по столбцу»?

В этом примере я хочу получить столбец результата

23, 1, 24, 25, 26, 27, 2829.

Ответы [ 2 ]

3 голосов
/ 19 марта 2019

Здесь запрос дыры:

SELECT idperson, name
FROM movie.people
WHERE idperson LIKE '23'
OR idperson LIKE '1'
OR idperson LIKE '24'
OR idperson LIKE '25'
OR idperson LIKE '26'
OR idperson LIKE '27'
OR idperson LIKE '28'
OR idperson LIKE '29'
ORDER BY FIND_IN_SET(idperson,'23,1,24,25,26,27,28,29');
2 голосов
/ 19 марта 2019

Вы можете просто добавить случай в инструкцию по заявке и назначить значения сортировки в зависимости от совпадения LIKE (хотя это кажется очень утомительным)

SELECT idperson, name
FROM movie.people
WHERE idperson LIKE '23'
OR idperson LIKE '1'
OR idperson LIKE '24'
OR idperson LIKE '25'
OR idperson LIKE '26'
OR idperson LIKE '27'
OR idperson LIKE '28'
OR idperson LIKE '29'
ORDER BY
CASE
    WHEN idperson LIKE '23' THEN 1
    WHEN idperson LIKE '1' THEN 2
    WHEN idperson LIKE '24' THEN 3
    -- And so on...
END

Также вы можете улучшить свой запрос, используя IN оператор и переписать ваш запрос как

idperson IN ('23', '1', '24', '25', '26', '27', '28', '29')

Примечание: ответ от Бернд Буффен для использования FIND_IN_SET(), вероятно, являетсялучший способ сделать это

...