Mysql 加法触发器的右合成

Mysql 加法触发器的右合成,mysql,sql,phpmyadmin,triggers,Mysql,Sql,Phpmyadmin,Triggers,代码: 当我想在phpmyadmin中添加触发器时,我得到错误: # Triggers for table Likes->News CREATE TRIGGER `TriggerUpdateNewsAfterInsertLikes` AFTER INSERT ON `Likes` FOR EACH ROW BEGIN UPDATE `News` SET `CountUpLikes` = (SELECT COUNT(*) FROM `Likes` WHERE `NewsIdn` = N

代码:

当我想在phpmyadmin中添加触发器时,我得到错误:

# Triggers for table Likes->News

CREATE TRIGGER `TriggerUpdateNewsAfterInsertLikes` AFTER INSERT ON `Likes`
FOR EACH ROW
BEGIN 
UPDATE `News` SET 
`CountUpLikes` = (SELECT COUNT(*) FROM `Likes` WHERE `NewsIdn` = NEW.`NewsIdn` AND `Type` = 'up'),
`CountDownLikes` = (SELECT COUNT (*) FROM `Likes` WHERE `NewsIdn` = NEW.`NewsIdn` AND `Type` = 'down'),
`CountFavorites` = (SELECT COUNT(*) FROM `Likes` WHERE `NewsIdn` = NEW.`NewsIdn` AND `IsFavorite` = 'yes');
END;
#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 '*) FROM `Likes` WHERE `NewsIdn` = NEW.`NewsIdn` 
AND `Type` = 'down'),
`CountFav' at line 8 
如果我使用
id
代替
*
我会得到错误:

# Triggers for table Likes->News

CREATE TRIGGER `TriggerUpdateNewsAfterInsertLikes` AFTER INSERT ON `Likes`
FOR EACH ROW
BEGIN 
UPDATE `News` SET 
`CountUpLikes` = (SELECT COUNT(*) FROM `Likes` WHERE `NewsIdn` = NEW.`NewsIdn` AND `Type` = 'up'),
`CountDownLikes` = (SELECT COUNT (*) FROM `Likes` WHERE `NewsIdn` = NEW.`NewsIdn` AND `Type` = 'down'),
`CountFavorites` = (SELECT COUNT(*) FROM `Likes` WHERE `NewsIdn` = NEW.`NewsIdn` AND `IsFavorite` = 'yes');
END;
#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 '*) FROM `Likes` WHERE `NewsIdn` = NEW.`NewsIdn` 
AND `Type` = 'down'),
`CountFav' at line 8 

请告诉我如何正确添加触发器?

听起来难以置信,在mysql中,计数和(*)之间不能有空格:

在您的例子中,它位于第二个子查询中。将其更改为:

select count(*) -- OK
select count (*) -- syntax error!

这同样适用于
cast(…)
,这是一个语法错误:
cast(col为unsigned)
(注意
cast
)之间的空格。我可以告诉你,我花了大约一个小时寻找那颗小宝石


编辑 另一个错误可能是由于未更改分隔符,如果过程中有分号,则需要更改分隔符:

...
`CountDownLikes` = (SELECT COUNT(*) FROM `Likes` WHERE `NewsIdn` = NEW.`NewsIdn` AND `Type` = 'down'),
...
试试看:

DELIMITER //

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

DELIMITER ;

哦,对不起,我看不到,我认为
*
'
中的错误。非常感谢和抱歉。现在我得到第二个错误(
#1064-您的SQL语法有错误;请查看与MySQL服务器版本对应的手册,以获取第9行附近使用的正确语法。请参阅代码