我有一张这样的表:
// reset_password_emails
+----+----------+--------------------+-------------+
| id | id_user | token | unix_time |
+----+----------+--------------------+-------------+
| 1 | 2353 | 0c274nhdc62b9dc... | 1339412843 |
| 2 | 2353 | 0934jkf34098joi... | 1339412864 |
| 3 | 5462 | 3408ujf34o9gfvr... | 1339412894 |
| 4 | 3422 | 2309jrgv0435gff... | 1339412899 |
| 5 | 3422 | 34oihfc3lpot4gv... | 1339412906 |
| 6 | 2353 | 3498hfjp34gv4r3... | 1339412906 |
| 16 | 2353 | asdf3rf3409kv39... | 1466272801 |
| 7 | 7785 | 123dcoj34f43kie... | 1339412951 |
| 9 | 5462 | 3fcewloui493e4r... | 1339413621 |
| 13 | 8007 | 56gvb45cf3454g3... | 1339424860 |
| 14 | 7785 | vg4er5y2f4f45v4... | 1339424822 |
+----+----------+--------------------+-------------+
每行都是一封电子邮件。现在我试图实现发送重置密码电子邮件的限制。我的意思是用户每天可以发送3封电子邮件(不是更多)。
所以我需要一个查询来查看用户的电子邮件数量历史记录:
SELECT count(1) FROM reset_password_emails WHERE token = :token AND {from not until last day}
我该如何实现:
. . . {from now until last day}
实际上我可以这样做:NOW() <= (unix_time + 86400)
..但我想使用interval
有更好的方法。谁能告诉我那是什么?
答案 0 :(得分:2)
你的表达方式有效,但有3个问题:
试试这个:
unix_time > unix_timestamp(subdate(now(), interval '1' day))
此处的阈值日期时间是每次查询一次计算的,因此上述所有问题都已得到解决。
答案 1 :(得分:1)
您可以使用unix_time
功能
from_unixtime
select r.*
from reset_password_emails r
where now() <= from_unixtime(r.unix_time) - interval '1' day
只需添加您想要的额外过滤器。
请在此处查看:http://sqlfiddle.com/#!9/4a7a9/3
它评估为无行,因为unix_time
字段的给定数据全部来自2011
使用显示转换的sqlfiddle编辑: