Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Как посчитать сумму заказов за последние три месяца
 
 автор: tAleks   (10.01.2011 в 13:49)   письмо автору
 
 

Есть таблица:

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.

Подскажите как это можно сделать. Желательно одним запросом (если такое вообще возможно).

  Ответить  
 
 автор: cheops   (10.01.2011 в 13:56)   письмо автору
 
   для: tAleks   (10.01.2011 в 13:49)
 

Хм... а не проще этот специальный вариант отследить по значению столбца ym уже средствами клиента? Т.е. получить сначала массив из трех значений, где ключом выступает ym, а затем выводить из него данные, формируя ключ уже средствами PHP? Тогда, если такого ключа нет, у вас автоматически будет получаться 0.

  Ответить  
 
 автор: tAleks   (10.01.2011 в 14:14)   письмо автору
 
   для: cheops   (10.01.2011 в 13:56)
 

Да, сейчас я тоже об этом думаю. Но интересует вопрос, можно ли такое сделать средствами MySQL?

  Ответить  
 
 автор: cheops   (10.01.2011 в 14:44)   письмо автору
 
   для: tAleks   (10.01.2011 в 14:14)
 

Ну если запесочить три вложенных запроса после SELECT, то наверное да. Но это де-факто будет означать три отдельных запроса, которые можно выполнить и так.

  Ответить  
 
 автор: Trianon   (10.01.2011 в 14:50)   письмо автору
 
   для: tAleks   (10.01.2011 в 14:14)
 

сделайте таблицу с месяцами, постройте LEFT JOIN с предыдущим запросом и будет Вам счастье.

Только cheops дело говорит.
Вся эта возня с пропущенными строками совершенно не оправдана.

PS. Таблицу можете сделать конструкцией SELECT const1 UNION SELECT const2 UNION SELECT const3

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования