我正在为联盟系统工作。我有2个mysql表。如果表引用[称为引用表]有5个条目具有相同的引用ID,则引用者将更新+ 1级。
表格参考。 / *参考表* /
id | u_id | ref_id
1 | 123 | 120
2 | 124 | 110
3 | 125 | 111
4 | 126 | 121
5 | 127 | 123
表ref_lev / *引用级别* /
id | u_id | ref_level
1 | 110 | 2
2 | 111 | 1
3 | 112 | 2
4 | 113 | 1
5 | 114 | 1
我的尝试
DELIMITER $$
CREATE
TRIGGER `OnrefsInsert` AFTER INSERT ON `refs`
FOR EACH ROW
BEGIN
UPDATE ref_lev
SET lev = lev + 1
WHERE u_id = OLD.u_id
AND (SELECT COUNT(*) FROM `refs` WHERE ref_id = OLD.u_id ) = 5
END;
$$
DELIMITER ;
答案 0 :(得分:0)
在您发布的代码中,WHERE
条件中的以下部分完全错误并导致错误。
AND SELECT COUNT(*) FROM `refs` WHERE ref_id = OLD.u_id = 5
我认为你真的不需要触发它。如果你的主要目的是 更新表格然后你可以做下面的事情
UPDATE ref_lev a
JOIN refs b ON a.u_id = b.u_id
AND b.ref_id = 5
SET a.ref_level = a.ref_level + 1
修改强>
每条评论,你可以试试这个
UPDATE ref_lev a
JOIN
(
SELECT u_id,COUNT(ref_id) as countref FROM `refs`
GROUP BY u_id
HAVING countref = 5
) X ON a.u_id = X.u_id
SET a.ref_level = a.ref_level + 1