2014-09-04 46 views
1

我使用下面的脚本从以前的24小时中提取数据,并在html表中吐出来,它在整个8月份工作,但自从月份改为九月和现在是从第一个条目显示的所有数据..PHP从前24小时选择数据SQL数据库

我的“时间戳”列是VARCHAR +主键,被格式化,像这样:2014年4月9日1时33分59秒

这是脚本:

$sql = "SELECT * 
     FROM my_table 
     WHERE Timestamp >= DATE_FORMAT(CURDATE(), '%d/%m/%Y') 
     ORDER BY Timestamp "; 

此脚本有什么问题?我只是想要它从过去的24小时内提取所有数据,这就是事先感谢!

+3

你为什么不使用'DATETIME'数据类型为时间戳列?这种格式的日期不容易比较。 – Barmar 2014-09-04 00:39:06

+0

如果你打算把它作为VARCHAR存储,你应该使用'YYYY-MM-DD',而不是'DD/MM/YYYY'。 – Barmar 2014-09-04 00:39:56

+0

在黑暗中拍摄,但会在'WHERE Timestamp LIKE DATE_FORMAT(CURDATE(),'%​​d /%m /%Y')'工作吗?在获得所有匹配之后,不要获得任何东西。我什至不知道这是有效的sql – Chausser 2014-09-04 00:42:15

回答

1

而不是将CURDATE()转换为字符串,您应该将Timestamp转换为DATE。您可以使用STR_TO_DATE

WHERE STR_TO_DATE(Timestamp, '%d/%m/%Y %H:%i:%s') >= CURDATE() 
ORDER BY STR_TO_DATE(Timestamp, '%d/%m/%Y %H:%i:%s') 

你也可以使用原来的查询,但只使用=代替>=。你只需要当前日期的行,而不是将来的行。

+0

非常感谢你,像一个魅力:) – 2014-09-04 00:55:09

0

如果在PHP中,我使用diff

$sql = "SELECT timestamp from yourtable"; 
$now = new DateTime(); 
if($r = mysql_query($sql)) 
{ 
    while($row = mysql_fetch_array($r)) 
    { 
     $dt = date("Y-m-d H:i:s",strtotime($row['timestamp'])); 
     $dates = new DateTime($dt); 
     $datedif = $now->diff($dates)->format("%d"); 
     if($datedif >= 1) 
     { 
      Your events 
     } 
    } 
} 

希望这有助于你