MySQL在两个日期之间选择不按预期工作

时间:2011-06-08 11:26:18

标签: php mysql join date between

我正在尝试创建一个查询,选择两个日期之间的所有日期 这是我的问题:

$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秒)

是的,我的表存在,列也是如此:)

3 个答案:

答案 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`