我有两张桌子:
userGroups
:
id name users
===================
1 abcd 2
2 efgh 1
users
:
id name groupId
===================
1 Usr1 1
2 Usr2 2
3 Usr3 1
我正在尝试根据群组中的userGroups.users
用户进行count
自动更新。
有办法吗?
感谢。
答案 0 :(得分:3)
您可以使用更新/插入/删除触发器来实现此目的。
delimiter //
CREATE TRIGGER grp_count_trigger AFTER UPDATE ON users
FOR EACH ROW
BEGIN
update userGroups g
left join
(
SELECT groupId, count(*) as cnt
from users
group by groupId
) u on u.groupId = g.id
set g.users = u.cnt;
END
//
delimiter ;
您还需要对插入和删除执行此操作。
答案 1 :(得分:0)
更新users表后,检查groupId是否已更改。如果是这样,请增加新groupId的计数,并减少旧groupId的计数。
对于插入和删除,增加或减少组的计数。
CREATE TRIGGER my_update_trigger AFTER UPDATE ON users
FOR EACH ROW if(NEW.groupId <> OLD.groupId)
UPDATE userGroups SET users = users + 1 WHERE groupId = NEW.groupId;
UPDATE userGroups SET users = users - 1 WHERE groupId = OLD.groupId;
END IF
CREATE TRIGGER my_insert_trigger AFTER INSERT ON users
FOR EACH ROW UPDATE userGroups SET users = users + 1 WHERE groupId = NEW.groupId;
CREATE TRIGGER my_delete_trigger AFTER DELETE ON users
FOR EACH ROW UPDATE userGroups SET users = users - 1 WHERE groupId = OLD.groupId;
对于插入触发器,您可能需要检查计数行是否存在,如果不存在计数1的插入,而不是执行将计数增加1的更新。