这里快速一下,我正在尝试选择两个时间戳之间的所有记录。当前时间和接受日期。接受日期是 UNIX 时间戳。我试图从名为“messages”的表中选择记录,每个记录的 UNIX 时间戳位于“时间”列中。
这是我尝试过的查询之一
$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()) ";
我确信这是显而易见的事情,非常感谢您提供一些意见!
最佳答案
我会通过独立运行来调试它:
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 时间戳。还有一个反函数 FROM_UNIXTIME(x)
takes a UNIX timestamp and converts it to a DATETIME .
在谓词子句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()) ";
关于mysql - 获取2个时间戳之间的记录MySql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18520906/