MySQL: выберите все даты в диапазоне даже если никакие существующие записи

Динамическое связывание является единственным практическим способом удовлетворения некоторых лицензионных требований, таких как LGPL .

25
задан pilcrow 10 September 2012 в 04:30
поделиться

3 ответа

Выполните правое внешнее соединение с таблицей, назовите ее tblCalendar, которая предварительно заполнена датами, по которым вы хотите сообщить. И присоединяйтесь к полю даты.

Paul

1
ответ дан 28 November 2019 в 21:46
поделиться

Этот вопрос задает то же самое, что я думаю. Обычно принятый ответ выглядит так: вы либо делаете это в своей логике приложения (прочтите то, что у вас есть в массиве, затем перебираете массив и создаете недостающие даты), либо вы используете временные таблицы, заполненные датами, которые вы хотите присоединиться.

5
ответ дан 28 November 2019 в 21:46
поделиться

Если подумать, вам должно быть что-то вроде этого:

CREATE TEMPORARY TABLE DateSummary1 ( datenew timestamp ) SELECT DISTINCT(DATE(datecreated)) as datenew FROM users;

CREATE TEMPORARY TABLE DateSummary2 ( datenew timestamp, number int ) SELECT DATE(datecreated) as datenew, count(*) AS number FROM users 
WHERE DATE(datecreated) > '2009-06-21' AND DATE(datecreated) <= DATE(NOW())
GROUP BY DATE(datecreated) ORDER BY datecreated ASC;

SELECT ds1.datenew,ds2.number FROM DateSummary1 ds1 LEFT JOIN DateSummary2 ds2 on ds1.datenew=ds2.datenew;

Это дает вам все даты в первой таблице и итоговые данные счетчика в вторая таблица. Возможно, вам потребуется заменить ds2.number на IF (ISNULL (ds2.number), 0, ds2.number) или что-то подобное.

0
ответ дан 28 November 2019 в 21:46
поделиться
Другие вопросы по тегам:

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