【问题标题】:How right make query trigger?如何正确地触发查询?
【发布时间】:2014-02-10 04:01:57
【问题描述】:

代码:

CREATE TRIGGER `TriggerUpdateNewsAfterChangeLikes` AFTER INSERT, UPDATE, DELETE ON `Likes`
FOR EACH ROW
BEGIN 
UPDATE `News` SET 
`CountUpLikes` = (SELECT COUNT(*) FROM `Likes` WHERE `NewsIdn` = OLD.`NewsIdn` AND `Type` = 'up'),
`CountDownLikes` = (SELECT COUNT (*) FROM `Likes` WHERE `NewsIdn` = OLD.`NewsIdn` AND `Type` = 'down'),
`CountFavorites` = (SELECT COUNT(*) FROM `Likes` WHERE `NewsIdn` = OLD.`NewsIdn` AND `IsFavorite` = 'yes');
END

当我进行查询时,在 phpmyadmin 中出现错误:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ' UPDATE ON `Likes`
FOR EACH ROW
BEGIN 
UPDATE `News` SET 
`CountUpLikes` = (' at line 1 

请告诉我为什么会出现此错误以及如何正确查询?

【问题讨论】:

    标签: mysql sql triggers phpmyadmin


    【解决方案1】:

    试试这样的:

        CREATE TRIGGER TriggerUpdateNewsAfterChangeLikes AFTER UPDATE ON Likes
        FOR EACH ROW
        BEGIN 
        UPDATE News SET 
        CountUpLikes = (SELECT COUNT(*) FROM `Likes` WHERE `NewsIdn` = OLD.`NewsIdn` AND `Type` = 'up');
        UPDATE News SET
        CountDownLikes = (SELECT COUNT (*) FROM `Likes` WHERE `NewsIdn` = OLD.`NewsIdn` AND `Type` = 'down');
        UPDATE News SET
        CountFavorites = (SELECT COUNT(*) FROM `Likes` WHERE `NewsIdn` = OLD.`NewsIdn` AND `IsFavorite` = 'yes');
        END;
    

    不幸的是 mysql 不允许在同一个触发器上发生多个事件。

    【讨论】:

    • 您可以在此处阅读有关触发器的更多信息:sitepoint.com/how-to-create-mysql-triggers
    • 一个触发器正在工作。非常糟糕,现在我需要编写 3 个触发器而不是 1(: 感谢您的帮助。
    猜你喜欢
    • 2020-03-07
    • 1970-01-01
    • 2022-11-02
    • 2021-05-06
    • 1970-01-01
    • 2021-05-01
    • 1970-01-01
    • 2011-05-21
    • 2016-01-11
    相关资源
    最近更新 更多