Tôi đã tạo một thủ tục được lưu trữ trong mysql bằng cú pháp sau.
DROP PROCEDURE IF EXISTS `sp-set_comment_count`;
DELIMITER $$
CREATE PROCEDURE `sp_set-comment_count` (IN _id INT)
BEGIN
-- AC - AllCount
DECLARE AC INT DEFAULT 0;
SELECT COUNT(*) AS ac
INTO AC
FROM usergroups AS ug
LEFT JOIN usergroup_comments AS ugm ON ugm.`gid` = ug.`id`
LEFT JOIN mediagallery AS dm ON ugm.mid = dm.`id`
WHERE dm.`status` NOT IN (200, 201, 202, 203, 204, 205)
AND ug.`id` = _id;
UPDATE usergroups
SET allCount = AC,
WHERE usergroups.`id` = _id;
END $$
DELIMITER ;
FYI Tôi đã đơn giản hóa rất nhiều thủ tục được lưu trữ nhưng tôi biết nó hoạt động mà không có vấn đề gì.
Những gì tôi muốn có thể làm là thiết lập một trình kích hoạt từ usergroup_comments hoạt động như thế này.
DROP TRIGGER IF EXISTS `usergroups_comments_insert`
CREATE TRIGGER `usergroups_comments_insert` AFTER INSERT ON `usergroups_comment`
FOR EACH ROW
BEGIN
CALL sp-set-comment_count(NEW.`gid`);
END;
Nhưng vì một số lý do, mỗi lần tôi làm mysql lại đưa ra một lỗi với tôi, điều đó không hữu ích lắm khi nói rằng có lỗi cú pháp trên dòng 4.
Tôi đã xem qua tài liệu mysql và tìm thấy một số thông tin về các hạn chế của trình kích hoạt nhưng thấy nó khá phức tạp.
http://dev.mysql.com/doc/refman/5.1/en/stored-program-restrictions.html
Bất kỳ ý tưởng sẽ hữu ích.