php – 如何在连接2个表时减少MySQL上的用户优先级字段?
发布时间:2020-12-13 22:25:39 所属栏目:PHP教程 来源:网络整理
导读:假设我有电子邮件和优先级表: 优先级表字段: Fields: uid,priority 电子邮件表格字段: Fields: id,uid,content 每个用户都有很多电子邮件.在脚本中,我根据用户的优先级(通过加入2个表)来获取用户的电子邮件.但是当我批量获取并且具有最高优先级的用户在队
假设我有电子邮件和优先级表:
优先级表字段: 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]"); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |