为什么这个MySQL查询返回0个结果

3

我试图获取过去5分钟内的所有记录,但是没有返回任何内容...

SELECT * FROM (`user_actions`) WHERE `IP` = '127.0.0.1' AND `type` = 'Failed Login' AND date =DATE_SUB(NOW(), INTERVAL 5 MINUTE) 

你的数据是什么样子?我们可以假设它返回了空值,因为实际上确实没有任何东西... - Aaron Hathaway
1
这是一个相当容易发现的逻辑错误在查询中,你不需要任何数据来看到它。踩票并不是必要的。 - Dan Grossman
我认为这里的负评有些严厉了。鉴于他对自己试图实现的内容所做的解释,他的错误是明显的。 - Matthew
2个回答

2

应该使用date >而不是date =,这只会匹配刚好等于5分钟前的时间的行。

举个例子,如果现在是下午12:30,要查找过去5分钟内的行,你需要筛选所有时间大于下午12:25的行。仅查询时间等于下午12:25的行将无法获取记录于下午12:26、12:27等时间的行。

SELECT * FROM user_actions WHERE IP = '127.0.0.1' AND type = 'Failed Login' AND date > DATE_SUB(NOW(), INTERVAL 5 MINUTE) 

2

返回空值是因为你所查询的内容没有结果……即恰好5分钟之前的日期。

在使用DATE时,不应该使用=运算符,而应该使用不等式。

也就是说,你需要查询大于5分钟前的日期。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接