【发布时间】:2011-09-10 09:27:40
【问题描述】:
我正在开发一个“评分”系统,并试图通过使用一个存储过程来确保一个人不能两次提交评分,该存储过程将在允许一个新的项目之前检查一个人是否对特定项目进行了评分要保存的等级。奇怪的是,我传递了一个用户 ID 和对象 ID,但是当我的存储过程选择 COUNT(*) 时,我得到了错误的数字。
这是我的存储过程:
CREATE PROCEDURE `ADD_GRADE`(IN objectID int, IN grader int)
BEGIN
DECLARE gradeCount INT;
SELECT COUNT(*)
FROM GRADES
WHERE Obj_ID = objectID AND Grader = grader
INTO gradeCount;
IF gradeCount <= 0 THEN INSERT INTO Grades (Obj_ID, Grader) VALUES (objectID, grader);
END IF;
IF 语句正在运行,但由于某种原因,我的 GradeCount 似乎忽略了 Grader ID 并仅根据 Obj_ID 进行检查。我添加了选择以确保我的参数保持在正确的值,并且它们是。如果我只复制选择并在其他地方手动执行,我会得到正确的数字。
虽然是 MySql 的新手,但我对 SQL 本身并不陌生。我只是要疯了吗?还是我做错了什么?
谢谢
【问题讨论】:
-
不确定问题出在哪里,但是你的逻辑太复杂了。
COUNT(*)不能返回 IF gradecount < 1 THEN INSERT(IOW,如果该评分者和 obj_id 还没有行,则插入)。
标签: mysql sql stored-procedures