数据库生活在过去?

时间:2012-06-26 12:46:23

标签: php mysql date

我的MySQL数据库中有事件都有日期。当我执行SQL查询以获取将来的所有事件时,我收到错误...尽管事件的日期是将来的。当我更改我的SQL请求以选择过去的日期时,我会从未来获得那些...
下面的SQL语句之前有用,但由于某种原因它停止工作......

我使用此SQL请求:

$sql = "SELECT * FROM calendar WHERE date >= CURDATE() order by `date`";

我得到一个空数组......结果 但是,如果我将查询更改为此,我将获取数据库中的所有事件:

$sql = "SELECT * FROM calendar WHERE date <= CURDATE() order by `date`";

这是我的数据库数据。在我看来,所有数据都在未来...... enter image description here

date表的格式是默认日期类型:
enter image description here

当我向我的服务器询问时间echo date("Y-m-d");时,我得到了今天的日期...

那我在哪里犯错?

6 个答案:

答案 0 :(得分:2)

您可能正在检查错误的日期字段。您是否有创建日期和预定日期?

我可能会因为我现在感冒的药而疯狂,但你的日期表不可能是你的日历项的日期,id提交的只是一个int(2),这看起来有点小

答案 1 :(得分:2)

也许更简单?我注意到表中的列名是date,它也是函数date()的名称,它返回datetime值的日期部分。如果是这样的话

$sql = "SELECT * FROM calendar c WHERE c.`date` <= CURDATE() order by `date`";

会做到这一点。即使不是mysql本身,你使用的gui应用程序(对我来说似乎是phpmyadmin)可能会感到困惑。

(顺便说一下,你忘记了order by子句中date的结束标记)

答案 2 :(得分:1)

获得一个空集意味着找不到匹配的东西。我会看看你的日期格式。我唯一想到的是它正在比较一个不匹配的类型,所以只返回一个空集。

答案 3 :(得分:1)

使用DATEDIFF:

DATEDIFF

WHERE DATEDIFF(date,CURDATE)&gt; 0

答案 4 :(得分:0)

在进行查询之前,请运行以下命令:

SET time_zone = '-2:00'; // or whatever your time zone is.

答案 5 :(得分:0)

不要问我怎么或为什么,但我已经截断了我的表并重新插入了一些数据,我的查询似乎工作正常:

$sql = "SELECT * FROM `calendar` WHERE `date` >= CURDATE() order by `date`";

所以,尽管事实上问题似乎是通过截断我的桌子来解决的,但我想知道问题的答案......任何人都可以提供给我吗?