|
|
|
| Есть таблица:
CREATE TABLE users_orders(
id_order INT(11) NOT NULL AUTO_INCREMENT,
id_user INT(11) NOT NULL,
date_order DATE DEFAULT NULL,
number CHAR(20) NOT NULL,
volume DECIMAL(7, 2) DEFAULT NULL,
PRIMARY KEY (id_order),
INDEX id_user (id_user)
)
ENGINE = MYISAM;
|
Содержить заказы, и их суммы в колонке volume.
Нужно посчитать объемы по месяцам, за последние 3 месяца. Т.е. нужно получить 3 занчения: Объем в этом месяцы, Объем в прошлом месяце, и Объем в позопрошлом месяце.
Делаю так:
$sql = "
SELECT
DATE_FORMAT(date_order, '%Y-%m') AS ym,
SUM(volume)
FROM users_orders
GROUP BY ym
LIMIT 3";
|
Но в таком случае, если в каком-то из трех последних месяцев заказов нет (например в пердыдущем), то запрос выдаст три значения: Объем за текущий месяц, Объем в позопрошлом месяце (прошлый пропустит, т.к. в этом месяце нет заказов) и позо-позопрошлый. - Так мне не надо.
Нужно, если в каком-то месяце нет заказов, чтобы за этот месяц было выведено - 0.
Подскажите как это можно сделать. Желательно одним запросом (если такое вообще возможно). | |
|
|
|
|
|
|
|
для: tAleks
(10.01.2011 в 13:49)
| | Хм... а не проще этот специальный вариант отследить по значению столбца ym уже средствами клиента? Т.е. получить сначала массив из трех значений, где ключом выступает ym, а затем выводить из него данные, формируя ключ уже средствами PHP? Тогда, если такого ключа нет, у вас автоматически будет получаться 0. | |
|
|
|
|
|
|
|
для: cheops
(10.01.2011 в 13:56)
| | Да, сейчас я тоже об этом думаю. Но интересует вопрос, можно ли такое сделать средствами MySQL? | |
|
|
|
|
|
|
|
для: tAleks
(10.01.2011 в 14:14)
| | Ну если запесочить три вложенных запроса после SELECT, то наверное да. Но это де-факто будет означать три отдельных запроса, которые можно выполнить и так. | |
|
|
|
|
|
|
|
для: tAleks
(10.01.2011 в 14:14)
| | сделайте таблицу с месяцами, постройте LEFT JOIN с предыдущим запросом и будет Вам счастье.
Только cheops дело говорит.
Вся эта возня с пропущенными строками совершенно не оправдана.
PS. Таблицу можете сделать конструкцией SELECT const1 UNION SELECT const2 UNION SELECT const3 | |
|
|
|