获取2个时间戳MySql之间的记录

时间:2013-08-29 21:02:21

标签: mysql

在这里快点,我正在尝试选择两个时间戳之间的所有记录。当前时间和接受日期。接受日期是UNIX时间戳。我试图从名为“messages”的表中选择记录,并且每个记录的UNIX时间戳都在“time”列中。

这是我尝试的其中一个问题

    $query = " SELECT * FROM `messages` WHERE `user_id` = $id \n"
. "And `time` between \"(UNIX_TIMESTAMP($timestamp)\" And UNIX_TIMESTAMP(NOW()) ";

它似乎没有为我返回任何东西。我尝试了很多不同的变化。我也试过这个 - $ timestamp是Unix格式..

$query = " SELECT * FROM `messages` WHERE `user_id` = $id \n"
. "And `time` between $timestamp And UNIX_TIMESTAMP(now()) ";

我确信这是明显的,非常感谢一些意见!

1 个答案:

答案 0 :(得分:1)

我会通过独立运行来调试它:

SELECT `user_id`, `time`,
       UNIX_TIMESTAMP($timestamp) AS ts_from, UNIX_TIMESTAMP(NOW()) AS ts_to
  FROM `messages`

...确认数据类型和值是您预期的。您可能必须嵌入$ timestamp的示例作为文字值来单独测试SQL。

$timestamp的计算也可能使用与数据库服务器不同的时区设置。根据这些消息记录的最近时间,它可能是一个因素。

<强>更新

问题在于混合铸造。 UNIX_TIMESTAMP(x)获取DATETIME并将其转换为UNIX时间戳。还有takes a UNIX timestamp and converts it to a DATETIME的反函数FROM_UNIXTIME(x)

在谓词子句time BETWEEN x AND y中,所有3个参数都需要是相同的类型。

假设您的time列包含DATETIME,我认为您只想:

$query = "SELECT * FROM `messages` WHERE `user_id` = $id "
       . "And `time` between FROM_UNIXTIME($timestamp) And NOW() "; 

另一方面,如果time是UNIX时间戳:

$query = "SELECT * FROM `messages` WHERE `user_id` = $id "
       . "And `time` between $timestamp And UNIX_TIMESTAMP(NOW()) "; 
相关问题