|
|
|
| Существует 2 таблицы
Таблица store:
Содержит оклоло ~400 записей
ID, NAME
[1, name1]
[2, name2]
[3, name3]
...
[101, name4]
...
...
[400, name5]
|
Таблица store_stat:
Содержит около ~10 записей
ID, COUNT
Нужно вывести данные из двух этих таблиц, связав их по ID и отсортировав по COUNT в порядке убывания.
Пробую сделать так:
SELECT `store.ID`, `store.NAME`, `store_stat.COUNT` FROM `store` LEFT JOIN `store_stat` ON `store.id` = `store_stat.id` ORDER BY `store_stat.COUNT` DESC
|
Требуется, чтобы сначала вывелись результаты запроса с наибольшим числом COUNT, а в итоге выводятся сначала те, у которых нет записей в таблице store_stat а затем, в самом конце, выводятся уже в убывающем порядке найденые записи с COUNT
Помогите решить эту задачу | |
|
|
|
|
|
|
|
для: Dr Lines
(24.04.2010 в 04:29)
| | так уберите LEFT - строки с NULL исчезнут, и Вы получите искомое. | |
|
|
|
|
|
|
|
для: Trianon
(24.04.2010 в 09:35)
| | Требуется чтобы сначала выводились строки с ниабольшим COUNT а потом, все остальные, включая те, для которых нет записи в store_stat | |
|
|
|
|
|
|
|
для: Dr Lines
(24.04.2010 в 10:06)
| | Тогда надо либо определить должным образом третий столбик результата - чтобы был 0 а не NULL
Либо указать соответствующее условие порядка в ORDER BY (сперва все существующие, а потом уже по убыванию) | |
|
|
|
|
|
|
|
для: Trianon
(24.04.2010 в 10:09)
| | А как именно можно определить 3тий столбец, чтобы он был не null? | |
|
|
|
|
|
|
|
для: Dr Lines
(24.04.2010 в 10:27)
| | с помощью функции COALESCE() например. | |
|
|
|
|
|
|
|
для: Trianon
(24.04.2010 в 10:35)
| | Попробовал использовать COALESCE таким образом:
SELECT `store.ID`, `store.NAME`, COALESCE(`store_stat.COUNT`, 0) FROM `store` LEFT JOIN `store_stat` ON `store.id` = `store_stat.id` ORDER BY `store_stat.COUNT` DESC
|
В итоге ничего не изменилось, кроме того, что результаты запроса стали содержать не NULL, а 0
Остается вариант с ORDER BY
Чем можно установить такое условие для него? | |
|
|
|
|
|
|
|
для: Dr Lines
(24.04.2010 в 10:53)
| | Не изменилось потому, что в ORDER BY Вы по прежнему указываете столбец исходной таблицы (в ней же ничего не поменялось?), а не алиас табличного результата. Сервер и сортирует по таблице. | |
|
|
|
|
|
|
|
для: Trianon
(24.04.2010 в 11:16)
| | Да, действительно, в этом была ошибка
Вот так работает как надо:
SELECT `store.ID`, `store.NAME`, `store_stat.COUNT` FROM `store` LEFT JOIN `store_stat` ON `store.id` = `store_stat.id` ORDER BY COALESCE(`store_stat.COUNT`, 0) DESC
|
Спасибо за подсказку | |
|
|
|