mysql - 使用触发器更新第二个表

标签 mysql triggers

我正在尝试创建一个简单的触发器,但是,如果值来自 @total<,我无法在 prato 上设置 media 值/strong> 或 @sum。 我已经测试过用它们替换“1”或“1+1”,看看我是否没有正确更新或问题在于操作本身。

DELIMITER $$
CREATE
    TRIGGER ratings_prato BEFORE INSERT ON ratings
    FOR EACH ROW BEGIN
        SET @total = @total + 1;
        SET @sum = NEW.stars + @sum;
        UPDATE prato p SET p.media = @sum/@total WHERE p.id = 1;
    END;
$$
DELIMITER ;

有什么想法吗?

最佳答案

我已经完成了在触发器上误导FOR EACH ROW。我想,每次更新时,它都会遍历所有行。但是,它不是它,而是针对它更新的每一行执行,这使得事情成为可能。

这是我的触发器的最后结果,插入评级并更新食物(这是 prato)

DELIMITER $$  
CREATE
  TRIGGER inserting_dishes_rating AFTER INSERT ON ratings  
  FOR EACH ROW BEGIN 
    IF(NEW.food_id is not null) THEN  
      SET @media = (SELECT SUM(stars) FROM ratings WHERE food_id = NEW.food_id) / (SELECT COUNT(*) FROM ratings WHERE food_id = NEW.food_id);
      UPDATE foods f SET f.rate = @media WHERE f.id = NEW.food_id;
    ELSE
      SET @media = (SELECT SUM(stars) FROM ratings WHERE restaurant_id = NEW.restaurant_id) / (SELECT COUNT(*) FROM ratings WHERE restaurant_id = NEW.restaurant_id);  
      UPDATE restaurants r SET r.rate = @media WHERE r.id = NEW.restaurant_id;
    END IF;
END

关于mysql - 使用触发器更新第二个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24944234/

相关文章:

mysql - SQL查询获取每个类别的产品数量

javascript - 一秒钟内多次调用 Google App Script onEdit 函数失败

postgresql - 如何在触发函数或条件时获取更新语句

sql-server - 触发 AFTER INSERT、UPDATE、DELETE 以调用带有表名和主键的存储过程

mysql - 使用 AJAX 每秒更新同一个 MySql 表

mysql - 我应该为 Node.js 和 MySQL 使用哪个 ORM?

mysql与正则表达式多字匹配

mysql - Cloud9 IDE : Cannot Connect to MySQL via Node

MySQL 列上的触发器

php - 需要替代解决方案,而不是从触发器调用 PHP 代码