我正在尝试创建一个查询,选择两个日期之间的所有日期 这是我的问题:
$query = "SELECT DISTINCT * FROM D1,D2
WHERE D1.DATE_ADDED BETWEEN '$date1' AND '$date2' AND D1.D1_ID = D2.D2_ID";
问题是,它没有返回任何内容,但也没有产生错误
所以我尝试将它直接输入phpMyAdmin,就像这样
SELECT DISTINCT * FROM D1,D2
WHERE D1.DATE_ADDED BETWEEN '2011-01-01' AND '2011-12-12'
AND D1.D1_ID = D2.D2_ID`
然后像这样
SELECT DISTINCT * FROM D1,D2
WHERE D1.DATE_ADDED BETWEEN '2011-01-01' AND '2011-12-12'
并且喜欢这个
SELECT * FROM D1
WHERE DATE_ADDED BETWEEN '2011-01-01' AND '2011-12-12'
我得到了
MySQL返回一个空结果集(即零行)。 (查询耗时0.0003秒)
是的,我的表存在,列也是如此:)
答案 0 :(得分:1)
在第一种情况下,缺乏结果可能是因为内部联接。对于要在集合中的结果,它将需要两个表中的记录,即。除非d2在d2_id列中也具有该ID,否则不会出现来自d1的记录。要解决此问题,如果这对您的业务逻辑是正确的,请使用left join
。
但是,最后一个案例(没有连接)表明原因是第一个(左)表d1中缺少匹配的记录。
如果没有完整的数据集,我们无法进一步评论,因为您运行的所有代码都是完全有效的。
答案 1 :(得分:0)
如果您总是想要选择一整年,则更容易选择它:
SELECT * FROM D1 WHERE YEAR(DATE_ADDED) = 2011;
答案 2 :(得分:0)
请执行以下代码
SELECT DISTINCT * FROM D1,D2
WHERE D1.DATE_ADDED BETWEEN DATE_FORMAT('2011-01-01','%Y-%m-%d')
AND DATE_FORMAT('2011-12-12','%Y-%m-%d')
AND D1.D1_ID = D2.D2_ID`