【问题标题】:How to select/count all records which happened in the last 2 hours? - MYSQL如何选择/统计过去 2 小时内发生的所有记录? - MYSQL
【发布时间】:2012-12-11 12:41:07
【问题描述】:

在 MYSQL 中,我将日期和时间分开。我需要计算一个 ip 在过去 2 小时内登录失败的次数。如果他失败的次数太多,那么他在接下来的 2 小时内都无法登录。

我只是不知道哪种说法是正确的(也许以下 2 种都不是)。

SELECT COUNT(`ip`) AS count_failed_logins FROM `failed_logins` WHERE `time`=TIME(CURTIME()+Interval 2 hour)

SELECT COUNT(`ip`) AS count_failed_logins FROM `failed_logins` WHERE `time`=TIMEDIFF(CURTIME()+Interval 2 hour)

【问题讨论】:

    标签: mysql time intervals


    【解决方案1】:

    你可以简单地做:

    SELECT COUNT(`ip`) FROM `failed_logins` WHERE `time` > DATE_SUB(NOW(), INTERVAL 2 HOUR);
    

    【讨论】:

    • 该死,刚刚写了,但是用 COUNT(*) 而不是 ip :)
    • 但这能正常工作吗?因为time 只保留时间(13:00:18)。不包括日期。或者如果我单独存储日期时间而不是日期和时间会更好吗?
    • @povilasp 这是我的错,当我第一次发布这个主题并在之后立即编辑它时我忘记了它。
    • 您应该将字段类型更改为日期时间,除非表格每天都被截断,否则您的用户将无法在这 2 小时内的接下来的几天内登录。
    • 跟我想的完全一样。感谢您的帮助!我想我会使用 datetime 字段类型。
    猜你喜欢
    • 2016-04-11
    • 2020-03-21
    • 2013-06-26
    • 1970-01-01
    • 1970-01-01
    • 2015-09-28
    • 1970-01-01
    • 1970-01-01
    • 2017-09-23
    相关资源
    最近更新 更多