php – 如何在连接2个表时减少MySQL上的用户优先级字段?

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – 如何在连接2个表时减少MySQL上的用户优先级字段?脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
假设我有邮件和优先级表:

优先级表字段:

Fields: uid,PRiorITy

电子邮件表格字段:

Fields: id,uid,content

每个用户都有很多电子邮件.在脚本中,我根据用户的优先级(通过加入2个表)来获取用户的电子邮件.但是当我批量获取并且具有最高优先级的用户在队列中有1000个邮件时问题就出现了.第二个用户的优先级为99.我应该发送最多2个具有最高优先级的用户的电子邮件,因为在第一个用户的第三个记录中,他的优先级将是97且低于第二个用户.

如何解决这个问题呢?我正在用PHP编程,所以如果在PHP中更好地解决解决方案,请告诉我如何.

这是主要查询

select * From emails e left join by priority p on e.uid=p.uid order by priority DESC

EDIT1:
电子邮件表格中的数据:

id     uid     email_content

1      321     some example data
2      434     some other example data
3      321     another from First user
4      321     again another from 321

优先级表中的数据如下:

id      uid      priority

1       321      100
2       434      99

uid等于321的用户最初具有最高优先级,但不是所有电子邮件都是如此.发送第一封电子邮件时,优先级应为99,并且在第二封电子邮件优先级等于98之后.现在不应发送第三封电子邮件,并且具有434的uid的用户的电子邮件具有最高优先级.

由于我已经获取了10条记录,因此未获取更新的优先级!

解决方法

只需简单获取一个用户.发送电子邮件,然后只更新优先级.

<?PHP
$MysqLi = new MysqLi("127.0.0.1","root","","stackoverflow");

if ($MysqLi->connect_errno) {
    echo "Failed to connect to MysqL: (" . $MysqLi->connect_errno . ") " . $MysqLi->connect_error;
}


$query = "SELECT e.id,email_content,p.uid from emails e INNER JOIN priority p ON e.uid=p.uid ORDER BY priority DESC LIMIT 1";


$updateQuery = "UPDATE priority SET priority = priority - 1 WHERE uid = ?";

while (true) {
    $result = $MysqLi->query($query);
    if ($result->num_rows == 0) {
        break;
    }
    $row = $result->fetch_row();
    // @TODO send the mail
    // delete the email entry
    $MysqLi->query("DELETE FROM emails WHERE id = $row[0]");
    // Now update the PRIORITY
    $MysqLi->query("UPDATE priority SET priority = priority - 1 WHERE uid = $row[2]");
}

脚本宝典总结

以上是脚本宝典为你收集整理的php – 如何在连接2个表时减少MySQL上的用户优先级字段?全部内容,希望文章能够帮你解决php – 如何在连接2个表时减少MySQL上的用户优先级字段?所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。