您的位置:首页 > 数据库 > MySQL

投票系统 SQL存储过程 MYSQL遇到的一些问题.

2009-03-23 20:24 381 查看
@author songfeng
1,预处理语句EXECUTE STMT USING 变量名必须是用户定义变量(@变量名);
2,不能用变量代替PREPARE 内的 表名, 列名, 用CANCAT方式连接可以解决;

完整语句.

delimiter //
CREATE PROCEDURE vote_post(para_archive_id INT, para_star INT, para_time INT)
BEGIN
DECLARE voteNum INT;
SET @starName=concat('star', para_star);
SET @archive_id = para_archive_id;
SET @star = para_star;
SET @time = para_time;
SELECT COUNT(archive_id) INTO voteNum FROM `vote` WHERE `archive_id`=@archive_id;
IF voteNum > 0 THEN
SET @s = concat("UPDATE LOW_PRIORITY `vote` SET ", @starName, "=", @starName, "+ 1, `average`=((`star1` * 1) + (`star2` * 2) + (`star3` * 3) + (`star4` * 4) + (`star5` * 5))/(`star1` + `star2` + `star3` + `star4` + `star5`) WHERE archive_id=?");
PREPARE stmtSql FROM @s;
EXECUTE stmtSql USING @archive_id;
ELSE
SET @s = concat("INSERT DELAYED INTO `vote`(`archive_id`,", @starName, ", `average`, `dateline`) VALUE(?, 1, ?, ?)");
PREPARE stmtSql FROM @s;
EXECUTE stmtSql USING @archive_id, @star, @time;
END IF;
END
delimiter ;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: