Возможно ли вывести строку в начало результата запроса в MySQL?

#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