У меня есть следующий запрос mysql:
SELECT col1, col2, col3 FROM guests WHERE active = 1 AND guestId IN (233, 255, 254, 226, 182, 231, 113, 121)
Однако, когда я получаю результаты, я получаю их упорядоченными по guestId (который индексируется) в порядке возрастания (начиная с 121 и заканчивая 255). Мне нужно показать результаты на моем веб-сайте в этом конкретном порядке. Есть ли способ обойти заказ по умолчанию?
Благодарю.
Вы должны указать свой заказ в предложении ORDER BY:
SELECT col1, col2, col3 FROM guests WHERE active = 1 AND guestId IN (233, 255, 254, 226, 182, 231, 113, 121) ORDER BY FIND_IN_SET(guestId, '233,255,254,226,182,231,113,121');
FIND_IN_SET()
функция FIND_IN_SET()
возвращает целое число, которое является позицией, в которой первый аргумент находит свое соответствие в списке. Обратите внимание, что список является единственным аргументом строки, содержащимся в списке, разделенном запятыми, тогда как вашему предикату IN()
требуется переменное количество аргументов. Кроме того, в списке, который вы передаете FIND_IN_SET (), не должно быть пробелов.
Добавьте ORDER BY guestId DESC
к запросу, чтобы он выглядел следующим образом:
SELECT col1, col2, col3 FROM guests WHERE active = 1 AND guestId IN (233, 255, 254, 226, 182, 231, 113, 121) ORDER BY guestId DESC