Получить все записи с идентификатором, но первые записи также должны соответствовать другому условию - PullRequest
0 голосов
/ 20 февраля 2012

Я выбираю все станции, которые принадлежат группе станций, из моей базы данных.SELECT * FROM stations WHERE station_group_id = 1.

Теперь из всех полученных результатов я хочу, чтобы некоторые отображались первыми (например, станции, у которых line_id = 2, появляются первыми).Например, если это моя таблица stations:

id | station_group_id | line_id
-------------------------------
1  |                1 |       1
2  |                1 |       2
3  |                1 |       3

Я бы хотел, чтобы выходные данные были:

id | station_group_id | line_id
-------------------------------
1  |                1 |       2
2  |                1 |       1
3  |                1 |       3

, чтобы line_id = 2 была первой записью в выводе.

Я думал об использовании ORDER BY, но это не совсем проблема с порядком, это скорее "предпочтение".

Итак, можно ли разместить некоторые записи наначало вывода, основанное на условии, предпочтительно в одном запросе?Спасибо!

Ответы [ 3 ]

1 голос
/ 20 февраля 2012
SELECT * FROM stations WHERE station_group_id = 1 and line_id = 2
union 
SELECT * FROM stations WHERE station_group_id = 1 and 
         line_id != 2 order by line_id asc
1 голос
/ 20 февраля 2012

Попробуйте ниже:

SELECT * FROM stations 
WHERE station_group_id = 1 
ORDER BY if(line_id in('2','X','Y','Z'),0,1)
0 голосов
/ 20 февраля 2012

Как вы говорите, это на самом деле предпочтение, поэтому вы должны либо смоделировать его как дополнительное поле в таблице (например, порядковый номер, или порядок, или предпочитаемый порядок), либо продолжить сортировку по line_id и выполнить "специальный"сортировать "в коде.(найти элемент с id = 2, переместиться наверх)

...