在这里快点,我正在尝试选择两个时间戳之间的所有记录。当前时间和接受日期。接受日期是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()) ";
我确信这是明显的,非常感谢一些意见!
答案 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()) ";