繁体   English   中英

MySQL:如何计算和限制用户每小时提交的帖子数量?

[英]MySQL: How can I count and limit the number of post submitted by the user every hour?

我目前正在建立一个网站,用户可以在该网站上发帖(例如Twitter上的一条推文),但我想限制用户每小时可以在该网站上提交的帖子数量。

到目前为止,这是我编写的代码,它输出用户拥有的帖子总数。

$counter = mysql_query("SELECT COUNT(*) AS post_userID FROM post");
$num = mysql_fetch_array($counter);
$count = $num["post_userID"];
echo("$count");

if($count > 2) {
    echo("You have exceeded the posting limits, please try again in 24 hours");
}

我的桌子

+------------+------------+------+-----+---------+----------------+
| Field      | Type       | Null | Key | Default | Extra          |
+------------+------------+------+-----+---------+----------------+
| postID     |int(11)     | NO   | PRI | NULL    | auto_increment |
| post_userID|int(11)     | NO   |     | NULL    |                |
| message    |VARCHAR(140)| NO   |     | NULL    |                |
| time       |datetime    | NO   |     | NULL    |                |
+------------+------------+------+-----+---------+----------------+

如您所见,我的数据库中存储了一个时间(日期时间),它保存了帖子提交的时间。

例:

+------------+------------+------------+----------+
| postID     |post_userID | message    | time     |
+------------+------------+------------+----------+
| 1          |    25      | Hello Mike |1413620228| 
| 2          |    26      | Hi John!   |1413620332|
+------------+------------+------------+----------+

哦,顺便说一句,我的服务器类型是MySQL。

一种方法是:

select count(*) from post
  where post_userID = 25
    and time >= date_add(now(), INTERVAL -1 HOUR);

这将为您提供该用户在过去一个小时内的帖子数。

链接到SQL Fiddle

我假设您有一个users表。 在用户表中创建一个名为last_post_submit_time的列,然后在用户提交该帖子时在其中保存该时间。 最后,每当用户提交帖子时,检查current time - it's last_post_submit_time >= one hour 我希望你能得到...

您可以简单地将时间戳除以3600,然后将其舍入为整数,如下所示:

SELECT
    ROUND(time/3600) AS hours_since_epoch
FROM
    posts
WHERE
    port_userID = <user> AND hours_since_epoch = ROUND(UNIX_TIMESTAMP(NOW())/3600)

这将返回您本小时(大致)发布的列表帖子。

另一种方法是查看用户在过去一个小时内发布了多少:

SELECT
    COUNT(*)
FROM
    posts
WHERE
    port_userID = <user> AND time > UNIX_TIMESTAMP(NOW()) - 3600

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM