4

我的 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`";

这是我的数据库数据。在我看来,所有的数据都在未来...... 在此处输入图像描述

表格的格式date是默认的日期类型:
在此处输入图像描述

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

那么我在哪里犯错呢?

4

6 回答 6

2

您可能检查了错误的日期字段。您有创建日期和预定日期吗?

我现在正在服用感冒药,我可能会发疯,但你的日期表不可能是你日历项目的日期,提交的 id 只是一个 int(2),看起来有点小。

于 2012-06-26T12:59:11.153 回答
2

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

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

会成功的。即使不是 mysql 本身,您使用的 gui 应用程序(对我来说似乎是 phpmyadmin)也可能会感到困惑。

(顺便说一句,您忘记了dateorder by 子句中的结束标记)

于 2012-06-26T13:03:42.190 回答
1

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

于 2012-06-26T12:51:18.737 回答
1

使用 DATEDIFF :

日期差异

WHERE DATEDIFF(date, CURDATE) > 0

于 2012-06-26T12:56:57.500 回答
0

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

SET time_zone = '-2:00'; // or whatever your time zone is.
于 2012-06-26T12:50:46.663 回答
0

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

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

所以,尽管问题似乎可以通过截断我的表来解决,但我想知道为什么问题的答案......任何人都可以提供给我吗?

于 2012-06-27T08:12:00.490 回答