Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL查询,返回过去24小时内添加的所有行_Mysql_Sql_Sql Function - Fatal编程技术网

MySQL查询,返回过去24小时内添加的所有行

MySQL查询,返回过去24小时内添加的所有行,mysql,sql,sql-function,Mysql,Sql,Sql Function,我有一个包含以下列的表: ip(varchar 255), index(bigint 20), time(timestamp) 每次在那里插入内容时,time列都会获得当前时间戳。 我想运行一个查询,返回过去24小时内添加的所有行。 这就是我试图执行的: SELECT ip, index FROM users WHERE ip = 'some ip' AND TIMESTAMPDIFF(HOURS,time,NOW()) < 24 选择ip,从ip='some ip'和TIMESTAM

我有一个包含以下列的表:

ip(varchar 255), index(bigint 20), time(timestamp)
每次在那里插入内容时,time列都会获得当前时间戳。 我想运行一个查询,返回过去24小时内添加的所有行。 这就是我试图执行的:

SELECT ip, index FROM users WHERE ip = 'some ip' AND TIMESTAMPDIFF(HOURS,time,NOW()) < 24
选择ip,从ip='some ip'和TIMESTAMPDIFF(HOURS,time,NOW())的用户索引<24

它不起作用。

小时应该是小时。有关查看<代码>装置参数有效值的信息,请参阅文档:

TIMESTAMPADD(单位、间隔、日期时间)

将整数表达式间隔添加到日期或日期时间表达式datetime_expr。间隔的单位由unit参数给出,它应该是以下值之一:FRAC_seconds(微秒)、SECOND、MINUTE、HOUR、DAY、WEEK、MONTH、QUARTER或YEAR

因此,您的查询应该是:

SELECT ip, index
FROM   users
WHERE  ip = 'some ip'
AND    TIMESTAMPDIFF(HOUR, time, NOW()) < 24
mysql的使用

从tbl\u名称中选择一些内容
其中DATE_SUB(CURDATE(),间隔1天)From

TIMESTAMPADD(单位、间隔、日期时间)

添加整数表达式间隔 到日期或日期时间表达式 日期时间表达式。间隔单位 由单位参数给出,单位参数 应为以下值之一: 压裂秒(微秒),秒, 分、时、日、周、月、, 季度或年度

从MySQL 5.1.24开始,它是 可以在适当位置使用微秒 具有此函数的FRAC_SECOND,以及 不推荐使用压裂秒。压裂秒 在MySQL 5.5中删除

可使用以下公式指定单位值: 关键字之一,如图所示,或带有 SQL\u TSI\u的前缀。例如,一天 和秋子天都是合法的

mysql>选择TIMESTAMPADD(分钟,1,'2003-01-02')

->“2003-01-02 00:01:00”

mysql>选择TIMESTAMPADD(第1周,'2003-01-02')

->‘2003-01-09’

所以

SELECT TIMESTAMPADD(DAY,-1,CURRENT_TIMESTAMP());

应该是你想要的

你可能想考虑另一方面做这件事。不要每次减去24小时,而是计算24小时前的时间(一次),然后对照时间值检查时间值。虽然我对mySql不太熟悉,但很可能更为优化

SELECT ip, index FROM users WHERE ip = 'some ip' AND time > DATE_SUB(NOW(), HOUR, 24)
这假设您的表中没有“未来”时间。如果有,请将此附加到where子句:

AND time <= NOW()

和时间根据mysql手册,单位应该是小时而不是小时@MDMA-我想你已经找到答案了,肯定是小时(单数)我猜这实际上会使用
时间上的索引,而将timestampdiff(xxx,curdate(),time)与常数进行比较则不会,对吗?@araqnid:是的,如果存在索引,这个查询可以使用它。这适用于这个答案,我的第二个建议,萨尔曼A的答案和保罗G的。
SELECT ip, index FROM users WHERE ip = 'some ip' AND time > DATE_SUB(NOW(), HOUR, 24)
SELECT ip, index
FROM users
WHERE ip = 'some ip'
AND time >= NOW() - INTERVAL 24 HOUR
AND time <= NOW()