mysql - 根据其他字段的总和更新表中的字段

标签 mysql

我有 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/

相关文章:

java - Java获取MYSQL数据库大小

php - 使用 laravel 按纬度和经度搜索

python - MySQL 连接器不工作 : NO module named Connector

MySQL 没有优化 RIGHT JOIN 中的 IS NULL 子句

mysql - 获取两个日期之间的日期列表

mysql - 计算从上次 SQL 查询插入的行数

php - 用html向mysql添加新元素

mysql - 将 MM-DD-YYYY varchar 转换为日期时间

mysql - 如何使用 IntelliJ 正确设置 Spring Boot 和 Hibernate?

php - 我可以使用 RedBean PHP ORM 导出 Sqlite 数据库并导入到 MySQL 吗?