我需要了解如何执行以下操作: 如果用户的diffPoints字段已更改(从10变为20),则使用diffPoints的新值来增加与该用户在同一组中的所有其他用户的所有upoints字段。我想我会通过触发器来做到这一点。 因此,首先,触发器将监听users表中“ diffPoints”字段中的任何更改。 第二,我将获得与指定的user_id在同一组中的所有用户。我将通过查询来获取用户所属的组,然后使用此结果(即组)通过另一个查询来获取这些组中的其他用户。最后,我将为所有这些用户更新upoints字段。
select diffPoints
from
users
where
id=6
select gp1.group_id
from
grpusrs as gp1
where
gp1.user_id = 6
SELECT
gp2.user_id
FROM
grpusrs as gp2
WHERE
gp2.group_id = gp1.group_id
UPDATE users increment upoints = (diffPoints in query1) WHERE users.id = (user_id from query 3)
请在以下内容中提出建议:
答案 0 :(得分:0)
您可以在一个多表更新语句中执行此操作(请参见https://dev.mysql.com/doc/refman/8.0/en/update.html)
给予
drop table if exists us,ug;
create table us
(id int ,diffpoints int);
create table ug
(id int, uid int);
insert into us values
(1,10),(2,20),(3,30),(4,40),(5,50),(6,50);
insert into ug values
(1,1), (2,2),(2,3),(5,5),
(6,2), (6,6);
update us join
(
select us.id,ug.id grp
from us
join ug on ug.uid = us.id
where ug.id in
(select ug.id
from us
join ug on ug.uid = us.id and us.id = 2
)
) j on j.id = us.id
set diffpoints = 100;
联接在哪里计算出所有要更新的用户
+------+------------+
| id | diffpoints |
+------+------------+
| 1 | 10 |
| 2 | 100 |
| 3 | 100 |
| 4 | 40 |
| 5 | 50 |
| 6 | 100 |
+------+------------+
6 rows in set (0.00 sec)