sage
Новичок
SUM(), ORDER BY и IF() - проблема с сортировкой
Есть табличка items. Интересующие нас поля: model_id, id и storehouse (кол-во на складе). Поле model_id - уникальное; различные товары (различный model_id) могут иметь одинаковый id. Задача: отсортировать товары по названию таким образом, чтобы сначала шли товары, которые есть на складе (SUM(`storehouse`) <> 0), а затем после этих товаров - те, которых нет (SUM(`storehouse`) = 0). Что и пытаюсь сделать:
[sql]
SELECT
GROUP_CONCAT(`model_id`) AS `model_id`,
SUM(`storehouse`) AS `total_storehouse`
FROM `items`
WHERE `cat_id` = ...
GROUP BY `id`
ORDER BY IF (`total_storehouse`, 0, 1), `name`
[/sql]
на что ругается:
[sql]
ORDER BY `total_storehouse` DESC, `name`
[/sql]
не предлагать ) при таком происходит сортировка не по названию, а по кол-ву на складе: чем больше, тем выше.
У меня есть вариант с UNION... т.е. первым селектом выбираются те записи, у которых `total_storehouse` <> 0, вторым - `total_storehouse` = 0, но этот вариант мне кажется громоздким.... Есть какие-нить идеи?
Есть табличка items. Интересующие нас поля: model_id, id и storehouse (кол-во на складе). Поле model_id - уникальное; различные товары (различный model_id) могут иметь одинаковый id. Задача: отсортировать товары по названию таким образом, чтобы сначала шли товары, которые есть на складе (SUM(`storehouse`) <> 0), а затем после этих товаров - те, которых нет (SUM(`storehouse`) = 0). Что и пытаюсь сделать:
[sql]
SELECT
GROUP_CONCAT(`model_id`) AS `model_id`,
SUM(`storehouse`) AS `total_storehouse`
FROM `items`
WHERE `cat_id` = ...
GROUP BY `id`
ORDER BY IF (`total_storehouse`, 0, 1), `name`
[/sql]
на что ругается:
Как сие можно сделать? вариантUnknown column 'total_storehouse' in 'order clause'
[sql]
ORDER BY `total_storehouse` DESC, `name`
[/sql]
не предлагать ) при таком происходит сортировка не по названию, а по кол-ву на складе: чем больше, тем выше.
У меня есть вариант с UNION... т.е. первым селектом выбираются те записи, у которых `total_storehouse` <> 0, вторым - `total_storehouse` = 0, но этот вариант мне кажется громоздким.... Есть какие-нить идеи?