插入更新与计数之前的MySql触发器

时间:2014-07-04 23:52:20

标签: mysql sql-update insert-update triggers

我正在为联盟系统工作。我有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 ;

1 个答案:

答案 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