@XenK

Заполнить отсутствующие строки SQL?

Есть такой запрос:
SELECT DATE_FORMAT(`orders`.`date`, '%d.%m.%Y') as date, SUM((`orders_items`.`price`)*(`orders_items`.`count`)) AS `money` FROM `orders_items` 
LEFT JOIN `orders_groups` ON `orders_items`.`order_group_id` = `orders_groups`.`id`
LEFT JOIN `orders` ON `orders_groups`.`order_id` = `orders`.`id`
LEFT JOIN `goods` ON `goods`.`id` = `orders_items`.`good_id` 
LEFT JOIN `users` ON `orders`.`user_id` = `users`.`id`
LEFT JOIN `orders_status` ON `orders_status`.`id` = `orders_items`.`status_id` 
WHERE date(`orders`.`date`)
BETWEEN '2016-08-02' AND '2016-08-15' 
GROUP BY DATE_FORMAT(`orders`.`date`, '%d.%m.%Y')
ORDER BY `orders`.`date` DESC

Результат получается такой:
ff227496ec434f499d11053e0f960546.PNG
Как можно заметить, между датами 11.08.2016 и 15.08.2016 не хватает 4 дня. То есть, в эти дни не было записей (0 строк). Собственно вопрос, как выводить все даты в указанном в BETWEEN промежутке, даже если строк нету (12.08.2016 – 0, 13.08.2016 – 0...)?
  • Вопрос задан
  • 463 просмотра
Пригласить эксперта
Ответы на вопрос 2
idShura
@idShura
Массив дат можно создать запросом (не силен в mysql), что-то вроде этого:
SELECT DATE_ADD('2016-08-02' ,INTERVAL help_topic_id DAY) as mydate
 FROM mysql.help_topic order by help_topic_id asc limit 14

Затем с помощью left join подсоединить свой запрос.
Ответ написан
Комментировать
@edb
SQL
стандартное решение это создать таблицу-календарь и присоединить ее с right join.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы