Допустим, у меня есть таблица ниже.
Я хочу получить всех друзей, но хочу, чтобы id 5 был первым элементом в списке. Меня не волнует порядок, в котором я получу остальные предметы.
Желаемый результат запроса будет:
friends
-------
id name
5 nahum
1 moshe
2 haim
3 yusuf
4 gedalia
6 dana
Как я могу это сделать?
с использованием Mysql 5.1.x.
Благодаря!
Попробуй это:
select id,name from friends order by case when id=5 then -1 else id end
если у вас их больше одного, вы можете:
select id,name from friends order by case when id in (5,15,25) then -1 else id end,id
источник
Я не могу сейчас получить доступ к MySQL для тестирования, поэтому все может быть отменено ... но вы можете использовать тот факт, что логические значения также сортируют и что у вас может быть несколько полей сортировки.
SELECT ... ORDER BY id != 5, id
(вам, возможно, придется написать
id = 5
, я не могу вспомнить, сортируются ли ИСТИНА до или после ЛОЖЬ.)РЕДАКТИРОВАТЬ: О, я только что прочитал, что вас не волнует порядок остальных, и в этом случае я настоятельно рекомендую ответ @ Richard.
источник
id=5 desc
, потому что, когда столбец включает нули,!=5
сначала ставит нулиЕсли вы хотите сделать то же самое для запроса UNION, например, если у вас есть:
select id,name from friends UNION select id,name from friends order by id=5 desc
... вы получите исключение в PostgreSQL:
Можно использовать только имена столбцов результата, но не выражения или функции. СОВЕТ: добавьте выражение / функцию к каждому SELECT или переместите UNION в предложение from
Чтобы обойти это, вы должны использовать следующее:
select id,name, (id=5) AS is_five from friends UNION select id,name, (id=5) AS is_five from friends order by is_five DESC, id DESC
Выражение (id = 5) вернет 't' ИЛИ 'f', в зависимости от того, равно ли значение вашего столбца ожидаемому значению (5), поэтому порядок сначала будет упорядочивать столбцы 't', а затем остаток.
источник
Для решения этой проблемы вы должны использовать предложение MySQL ORDER BY FIELD. Хотя ответ на этот вопрос принят, вот лучшее решение.
select 1 id, 'Zeta' order_col union all select 2 id, 'Alpha' order_col union all select 3 id, 'Gamma' order_col union all select 4 id, 'Phi' order_col union all select 5 id, 'Delta' order_col union all select 6 id, 'Delta' order_col union all select 7 id, 'Alpha' order_col union all select 8 id, 'Gamma' order_col union all select 9 id, 'Zeta' order_col union all select 10 id, 'Phi' order_col order by field (order_col, 'Alpha', 'Gamma', 'Phi', 'Delta', 'Zeta'), id;
Это лучше чем
источник
Вы можете использовать
field()
в MySQL.select id,name from friends order by field(id,5,id)
Первый параметр в field () означает поле, по которому вы хотите выполнить сортировку, остальное - упорядочивание.
Таким образом, сначала будет отсортировано 5, а остальное - от id (без 5). Вы можете сделать подобное,
field(id,5,1,3,id)
если хотите, чтобы 5,1,3 были впереди.5 можно выбрать для сортировки наконец по
field(id,id,5)
. Второй идентификатор также исключает из него 5.источник
Это немного некрасиво, потому что в нем есть дублирование кода, но это помогает:
select .... where id = 5 union select .... where not id = 5
источник
order by
, он отсортирует весь союз.