2010-03-23 81 views
0

我有以下查询Mysql的填充缺少的日期

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 

。参加与客户ID noattend表与行对于每一日期(DATE2)表我跟着其他问题,右外意见加入它创造的价值,没有记录参加,但它仍然没有填充空 任何帮助非常赞赏

回答

0

如果你说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 
+0

感谢我想你的建议,但它似乎只在一些额外的空行进行拉(我觉得空行是很好,只要有日期有)我有25与我的和你的30。有任何想法吗? – bsandrabr 2010-03-23 17:54:03

+0

现在我觉得哑巴可能会有所帮助,如果我拿出限制条款 – bsandrabr 2010-03-23 18:03:44

0

你需要摆脱SELECT *中,列出你的列名来代替。如果您想要日期,请使用noattend.date2字段,而不是attend.date。对于那些为填写“缺失”日期而创建的额外行,Attend.date将为NULL(空白)。

喜欢的东西:

SELECT attend.id, attend.name, noattend.date2 
FROM . . . (continue your code here) 
+0

好点也谢谢最后一点必须是由date2 desc命令 – bsandrabr 2010-03-23 21:11:45