我有 2 张 table :
用户:{id、姓名、studentid、overall_score} 用户徽章:{id、badge_id、user_id、级别、分数}
一个用户可以拥有多个徽章。
我希望将overall_score 本身更新为userbadges 中所有分数的总和,其中user_id 与用户表中的id 匹配。
这可以作为触发器来完成吗?
我有一个可以在 PHP 中使用的 MySQL 语句,它只显示总分,但实际上并不更新任何内容。
SELECT users.studentid
, SUM(score) AS TotalItemsOrdered
FROM userbadges ub
INNER
JOIN users
ON users.id = ub.user_id
WHERE studentid = ?
最佳答案
尝试这个查询(编辑):
update USERS u
set u.overall_score =
( select sum(b.score) from USERBADGES b
where b.user_id=u.id ) ;
现在,如果你想每天自动运行这个查询,那么使用 MySQL 调度程序,如下所示:
DELIMITER $$
CREATE EVENT update_users_table
ON SCHEDULE EVERY 1 DAY
STARTS '2015-05-27 00:00:00'
DO
BEGIN
update USERS u
set u.overall_score =
( select sum(b.score) from USERBADGES b
where b.user_id=u.id ) ;
END$$
DELIMITER ;
如果您想在更新后自动运行此查询,请使用触发器:
DELIMITER $$
CREATE TRIGGER update_users_trigger AFTER UPDATE ON USERBADGES
FOR EACH ROW
BEGIN
IF NEW.score <> OLD.score THEN
update USERS u
set u.overall_score =
( select sum(b.score) from USERBADGES b
where b.user_id=u.id ) ;
END IF;
END$$
DELIMITER ;
关于mysql - 根据其他字段的总和更新表中的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30479256/