我有2個表:自動更新的MySQL列
userGroups
:
id name users
===================
1 abcd 2
2 efgh 1
users
:
id name groupId
===================
1 Usr1 1
2 Usr2 2
3 Usr3 1
我試圖根據用戶在該count
使userGroups.users
自動更新組。
有沒有辦法做到這一點?
謝謝。
我有2個表:自動更新的MySQL列
userGroups
:
id name users
===================
1 abcd 2
2 efgh 1
users
:
id name groupId
===================
1 Usr1 1
2 Usr2 2
3 Usr3 1
我試圖根據用戶在該count
使userGroups.users
自動更新組。
有沒有辦法做到這一點?
謝謝。
您可以使用更新/插入/刪除觸發器來實現。
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 ;
您還需要爲插入和刪除操作。
你是怎麼從中得到這一切的?你必須在水晶球v.9或什麼 – Strawberry
好的注意到,它也需要做插入,但我懷疑刪除以及,對嗎? – AdamMc331
它不起作用。 「用戶」列保持不變。 – user2153436
更新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;
對於INSERT觸發器,您可能需要檢查計數行存在,如果不與計數1,而不是這樣做遞增1
計數的更新執行插入我寧願運行SQL(也許是一個視圖)爲計數分組。如果你確實去觸發路線,你怎麼能確定它運行或沒有被禁用。 –
我不確定你需要在一個組中存儲用戶的數量,這當然是你可以在用戶表中用'COUNT(*)'查詢的東西。 – AdamMc331
給我上面的兩個人 - 通過觸發器保持計數結果更聰明,更快,更好。 DB更少,提供相同的結果。另外,如果你不是精神殘疾的人,你應該能夠確保觸發器運行。這也是相當微不足道的。 –