ฉันได้สร้างกระบวนงานที่เก็บไว้ใน mysql โดยใช้ไวยากรณ์ต่อไปนี้
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 ฉันทำให้ขั้นตอนการจัดเก็บง่ายขึ้น แต่ฉันรู้ว่ามันใช้งานได้โดยไม่มีปัญหาใด ๆ
สิ่งที่ฉันสามารถทำได้คือตั้งค่าทริกเกอร์จาก usergroup_comments ที่ใช้งานได้เช่นนี้
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;
แต่ด้วยเหตุผลบางอย่างทุกครั้งที่ฉันทำ mysql จะส่งข้อผิดพลาดมาที่ฉันซึ่งมีประโยชน์น้อยกว่าที่ระบุว่ามีข้อผิดพลาดทางไวยากรณ์ในบรรทัดที่ 4
ฉันได้อ่านเอกสารของ mysql แล้วและพบข้อมูลบางอย่างเกี่ยวกับข้อ จำกัด ของทริกเกอร์ แต่พบว่ามันค่อนข้างซับซ้อน
http://dev.mysql.com/doc/refman/5.1/en/stored-program-restrictions.html
ความคิดใด ๆ ที่จะเป็นประโยชน์