用MySQL或PHP计算以分钟为单位的时差量?

时间:2012-12-05 09:03:37

标签: php mysql time

我使用以下字段保存用户的唱歌信息:

  

user_id,login_date,login_time,status

每次尝试登录后,记录都会使用true或false状态插入数据库。如果他/她在最近3分钟内有3次登录失败,我想锁定用户。因此,我需要使用当前时间并以分钟格式计算其与表的3个最后记录的差异。

我的问题是:
1-这个时间计算哪个更好? PHP还是MySQL?
2-取决于你的建议,哪个功能更好?

谢谢。

4 个答案:

答案 0 :(得分:1)

以下查询会根据您的条件返回所有User_Id:

select user_id from t 
where login_date= CURDATE() 
      and login_time>TIMESTAMPADD(MINUTE,-3,CURTIME())
      and status = 'f'
group by user_id 
having count(*)>3

答案 1 :(得分:0)

不同的用法。如果我是你,我会记录最后一次失败的登录日期&数据库中的时间,这样您就可以从数据库中获取上次失败的登录时间以及来自数据库的用户数据。

用PHP或MySQL进行比较是否合适。

但是,你应该记住MySQL服务器& Web服务器应该具有相同的时区,并且时间应该同步,否则您的结果将不准确。

答案 2 :(得分:0)

考虑到你还需要做很多其他事情,我说使用php。您可以在尝试使用

登录时检索用户的最后3条记录
SELECT login_date, login_time, status FROM table WHERE user_id=$id ORDER BY login_DATE DESC LIMIT 3

然后在PHP中你可以做检查。如果失败,你仍然需要通知用户他被锁定,锁定用户(其他表?)并返回false进行登录。

在php中你可以做一些检查,如

  • 是否返回了树次尝试(少了没有锁定)
  • 最后检索到的记录是否少于3分钟? (否则没有锁)
  • 让所有树返回的值都是错误的尝试(否则没有锁定)

答案 3 :(得分:0)

  1. 我认为MySQL总是一个更好的计算解决方案,因为它比PHP快得多。
  2. 如果你使用时间戳,你可以简单地做time_x - time_y以获得秒数的差异,你的总计算将是:(time_x - time_y)/ 60,你的查询将看起来 像这样:

    SELECT user_id,login_date,login_time,status,((login_time-NOW())/ 60)as differenceColomn FROM usertable