@entermix

Как заполнить результат выборки пропусками?

Есть запрос:

SELECT `date`, SUM(`visits`) as `sum`, DATE_FORMAT(FROM_UNIXTIME(`date`), '%M %Y') as `period` FROM `statistics` WHERE `е_id` = 10 GROUP BY `period`  ORDER BY `date` ASC


Получаем следующий результат:
date 	sum 	period 	
1453323600 	7 	January 2016
1456693200 	4 	February 2016
1456779600 	9 	March 2016
1461099600 	11 	April 2016
1464728400 	12 	June 2016
1468443600 	5 	July 2016


date - это UNIX_TIMESTAMP(CURDATE()), т.е. 1 день - 1 запись

Здесь нету информации за май (потому что визитов попросту не было, а значит и статистика не записалась). Ведь не очень хорошо делать бесполезную запись в БД, если там все равно по нулям, к тому же если пишет триггер БД?

Можно ли как то нативным способом MYSQL получить подобную выборку, только чтобы было так?

date 	sum 	period 	
1453323600 	7 	January 2016
1456693200 	4 	February 2016
1456779600 	9 	March 2016
1461099600 	11 	April 2016
1464123600 	0 	May 2016 // Информация за май
1464728400 	12 	June 2016
1468443600 	5 	July 2016


То есть, чтобы даже если в таблице отсутствует информация за определенный месяц, после выборке она у нас была в виде заполненных нулей. Это нужно для того, чтобы отобразить график в c3js, чтобы было наглядно видно, в какой месяц визиты отсутствуют вообще (возможно это можно сделать средствами c3js?). То же самое нужно при выборке по дням, сейчас приходится заполнять эту информацию на стороне сайта, что как то не очень удобно.
  • Вопрос задан
  • 266 просмотров
Решения вопроса 1
Sanasol
@Sanasol
нельзя просто так взять и загуглить ошибку
сначала сформируйте пустой массив в котором все даты = нули.
Затем заполняйте его выборкой из базы.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@kretsu
я думаю (и это решние используется в реальных проектах) вам надо таблица для календаря, в бизнес системах это еще делается, чтоб отмечать рабочие/не рабочие дни.
связав вашу таблицу с таблицей календаря можно нормально получить "пропуски"
одна проблема - календарь надо поддерживать.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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