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

时间:2014-10-18 12:48:11

标签: php mysql

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

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

$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");
}

MY POST TABLE

+------------+------------+------+-----+---------+----------------+
| 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。

3 个答案:

答案 0 :(得分:1)

这样做的一种方法是:

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

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

Link to SQL Fiddle

答案 1 :(得分:1)

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

答案 2 :(得分:0)

您可以简单地将时间戳除以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