@maksim_fix
Junior PHP developer

Как написать данный запрос sql?

Нужно вывести записи, сортируя их по полю position, однако, записи с дефолтным значением position(это 0) должны быть в конце списка. То есть список будет таким(поле position): 1,2,3,4....0,0
  • Вопрос задан
  • 39 просмотров
Решения вопроса 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
ORDER BY `position` = 0, `position`
Но индексы при такой сортировке использоваться не будут.
Ответ написан
rozhnev
@rozhnev
Fullstack programmer, DBA, медленно, дорого
Углубляя ответ Rsa97
SELECT `e`.* 
FROM `event` `e` 
LEFT JOIN `event` ON `e`.`event_id` = `event`.`id` 
ORDER BY `e`.`position` = 0, `e`.`position`
LIMIT 10;


В сдучае если `position` может быть NULL тогда:
ORDER BY IFNULL(`e`.`position`, 0) = 0, `e`.`position`
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@d-stream
Готовые решения - не подаю, но...
сортировать не по полю, я по значению функции от этого поля (полей)

для этого в sql есть замечательный case (помимо ifnull/isnull/nullif и т.п.)

case when position=0 then 100500 else position end

p/s/ и кстати стоит подумать - а не быть ли дефолту null а не 0 - тогда раскроется еще один аспектик ордеринга (в ряде диалектов) как раз про null раньше/позже всех
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы