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

标签 mysql

这里快速一下,我正在尝试选择两个时间戳之间的所有记录。当前时间和接受日期。接受日期是 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/

相关文章:

javascript - 如何使我的动态下拉列表也依赖于父下拉列表?

mysql - SQL select where id=1 for condition where id=2

MySQL查询以计算总列的百分比

javascript - Twitter 如何管理要删除的推文?

Inno Setup 中的 MySQL 查询

mysql - ubuntu 12.04开放3306端口,允许任意ip连接mysql

mysql - MySQL 中的非规范化多对多关系

Mysql Select查询两次返回一行

mysql - SQL : "NOT IN" subquery optimization or alternatives

mysql - Flink数据库连接