我对
>(分组依据中的)是否应该表示肯定
>=,但是我认为这可以满足您的要求。
INSERT INTO cookies(id, email, cookie, date_time)SELECt NULL, $email, $hash, unix_timestamp()FROM cookieWHERe email = $email AND NOT EXISTS ( SELECt COUNT(CASE WHEN date_time > UNIX_TIMESTAMP(now() - INTERVAL 1 HOUR) THEN 1 ELSE NULL END) AS rowsInLastHour, COUNT(CASE WHEN date_time > UNIX_TIMESTAMP(now() - INTERVAL 1 DAY) THEN 1 ELSE NULL END) AS rowsInLastDay, COUNT(CASE WHEN date_time > UNIX_TIMESTAMP(now() - INTERVAL 1 MONTH) THEN 1 ELSE NULL END) AS rowsInLastMonth, COUNT(1) AS rowsEver FROM cookie WHERe email = $email HAVINg rowsInLastHour > 5OR rowsInLastDay > 10OR rowsInLastMonth > 50OR rowsEver > 100 );
- 通过
now() - INTERVAL 1 HOUR|DAY|MONTH
查找过去一个月|月几开始的时间,并计算在那些开始时间之后出现的那些值,对过去一个月|月中具有date_time值的所有行(用于电子邮件)进行计数。 - 然后,如果超过了您指定的任何限制,则它
HAVINg
仅使用产生奇异的结果(例如COUNT
,没有关联GROUP BY
子句的聚合总是导致1行)。 NOT EXISTS
如果没有结果(因为未超出限制),则返回true。
编辑:根据问题的需要,更新了比较以使用单位时间戳记。



