我正在尝试创建一个简单的触发器,但是,如果值来自 @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/