如何使用DATEDIFF选择行


How do I SELECT rows using DATEDIFF?

我使用这个日历插件来使用mySQL数据库显示我的客户的议程。日历用startend UNIX时间戳向我的脚本发布一个请求,如下所示:

/getevents.php?start=1262332800&end=1265011200&_=1263178646
//That last piece of data is to prevent caching.. apparently

在我的脚本中,我将UNIX时间戳转换为mySQL datetime对象,如下所示:

$start = $_GET['start'];
$end = $_GET['end'];
$start = gmdate("Y-m-d H:i:s", $start);
$end = gmdate("Y-m-d H:i:s", $end);
printf($start.".....".$end);

这正确地打印了如下内容(当我导航到2012年9月时):

2012-08-26 04:00:00.....2012-10-07 04:00:00

现在,我想从数据库中选择这些日期之间的所有事件。我的数据库只有1行,start字段是今天的日期:

 id     start                   end
 10     2012-09-05 20:27:00     0000-00-00 00:00:00

但是对于下面的SQL语句,我没有得到结果。我尝试过将>反转为<,但仍然一无所获。我没有任何错误,只是没有结果。

$sql = "SELECT * FROM all_events WHERE DATEDIFF('$start', 'start') > 0";
$result = mysql_query($sql, $link) or die(mysql_error());
echo "Rows:".mysql_num_rows($result);

正如您所看到的,现在我只是检查事件的start是否大于日历日期范围的start。。即8月26日是9月份的start

我没觉得有什么不对。。。请帮忙!我要把头发扯掉了!

不要使用single quotes作为列名,而是使用backticks。试试这个

SELECT * FROM all_events WHERE DATEDIFF(`start`, '$start') > 0

我建议使用FROM_UNIXTIME和准备好的语句,如:

$stmt = $mysqli->prepare("SELECT * FROM all_events WHERE DATEDIFF(FROM_UNIXTIME(?), start) > 0"); 
$stmt->bind_param($_GET['start']);

mysql_函数正在被弃用