#mysql
#mysql
Вопрос:
Например
SELECT * FROM foo WHERE (id = 2) OR (id = 14) OR (id = 22)
И я всегда хочу, чтобы 14 была верхней строкой. Возможно ли это в одном запросе? Я знаю, что мог бы просто сделать два.
Ответ №1:
SELECT *
FROM foo
WHERE id IN ( 2, 14, 22 )
ORDER BY id != 14
Ответ №2:
Другие люди рассказали вам, как решить проблему с учетом указанных условий, но вы должны спросить себя, почему у вас есть это требование в первую очередь.
Если вам нужно, чтобы элементы отображались в определенном порядке, и вы хотите, чтобы он определялся базой данных, вы могли бы добавить столбец display_order и УПОРЯДОЧИТЬ ПО нему. Это оставляет вас открытым для изменения ее в будущем.
Ответ №3:
Попробуйте это:
SELECT 1 as ordering, * FROM foo WHERE (id = 14)
UNION
SELECT 2 as ordering, * FROM foo WHERE (id = 2) OR (id = 22)
ORDER BY ordering ASC
Ответ №4:
Вы можете создать столбец с вашими приоритетами заказа (ordering) и использовать ORDER BY
.
SELECT * FROM foo WHERE (id = 2) OR (id = 14) OR (id = 22) ORDER BY ordering