Mysql заполнение пропущенных дат - PullRequest
0 голосов
/ 23 марта 2010

У меня есть следующий запрос

SELECT * 
FROM attend
RIGHT OUTER JOIN noattend ON attend.date = noattend.date2
WHERE attend.date
BETWEEN '2010-02-01'
AND '2010-04-01'
AND attend.customerid =1
ORDER BY date DESC 
LIMIT 0 , 30

Посещение таблицы с обычным noattend - это таблица со строкой для каждой даты (date2). Я следовал совету в других вопросах, чтобы присоединить его к правому внешнему соединению, чтобы создать значения, в которых нет записи о посещении, но она по-прежнему не заполняет пустые места. любая помощь высоко ценится

Ответы [ 2 ]

0 голосов
/ 23 марта 2010

Вам нужно избавиться от SELECT * и вместо этого перечислить имена столбцов. Там, где вы хотите указать дату, используйте поле noattend.date2, а не there.date. Attend.date будет пустым для тех дополнительных строк, которые созданы для заполнения ваших «пропущенных» дат.

Что-то вроде:

 SELECT attend.id, attend.name, noattend.date2
 FROM . . .  (continue your code here)
0 голосов
/ 23 марта 2010

Если вы говорите, что noattend - это таблица со строкой для каждой даты, вы должны использовать ее в предложении WHERE:

WHERE noattend.date2 BETWEEN (.....

И я думаю, что проще использовать LEFT JOIN:

SELECT * 
FROM noattend
LEFT OUTER JOIN attend ON (attend.date = noattend.date2 AND attend.customerid =1)
WHERE noattend.date2
BETWEEN '2010-02-01'
AND '2010-04-01'
ORDER BY date DESC 
LIMIT 0 , 30
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...