【问题标题】:Do Something When MYSQL Column Value Increments by 100当 MYSQL 列值递增 100 时做一些事情
【发布时间】:2012-11-15 10:29:52
【问题描述】:

当网站成员的帖子数达到 100 的倍数时,我需要提醒他们。当 mysql 表中的值达到 100、200、300 等时,是否可以运行函数或回显某些内容?

表结构:

username | password | email | posts 


我目前正在显示他们的帖子数:

$sql = mysql_query("SELECT `posts` FROM `user` WHERE username='$username'") or die(mysql_error());
$row = mysql_fetch_array($sql);

echo "<br /><h4>Your posts:</h4>" . " " . $row['posts'];



已解决:我同意 Marc 的使用模数的建议,这符合我的需要。

$sql = mysql_query("SELECT `posts` AS posts FROM `user` WHERE username='$username'") or die(mysql_error());
$row = mysql_fetch_array($sql);
$post = $row['posts'];

    if($post % 100 == 0) {

        mysql_query("INSERT INTO `posts` (name, message, message_raw) VALUES ('System', '$name has reached $post posts!', '$name has reached $post posts!')");

    }

【问题讨论】:

    标签: php mysql database database-design


    【解决方案1】:

    您可以使用触发器:

    http://dev.mysql.com/doc/refman/5.5/en/triggers.html

    只需创建一个 cron 作业

    【讨论】:

    • 这个逻辑不属于MySQL。它应该在 PHP 中完成。帖子是用户表的一部分,因此当您创建或尝试显示模型时,您可以检查帖子的数量。
    • 如果两个事件几乎同时发生并且从 199 增加到 201,则可能会错过应用程序中的触发器,因此需要进行特殊处理。 MySQL 触发器保证工作。
    • 谢谢,我试试看。
    【解决方案2】:

    你需要一个modulo

    模运算。返回 N 除以 M 的余数。

    这样

    SELECT username
    FROM `user` 
    WHERE username='$username' AND MOD(posts,100) = 0
    

    并且您可以在用户每次发布新帖子时检查条件

    【讨论】:

    • 在每次插入时添加额外的查询通常不是一个好主意。
    • 比触发器更好,如果您通过 ID 找到用户并且您有索引,那应该不是问题
    • 这个逻辑不属于查询。
    • 如果你想要所有具有这种条件的用户的列表,它会在 SQL 中更快并且更易于维护,并且你不必从数据库中获取所有用户并执行循环如果
    • 我不认为这是一个用例。你为什么要关心所有有 100、200、300 个帖子的用户?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多