我正在研究「分級」系統,並試圖確保一個人無法使用存儲過程兩次提交成績,人員在允許保存新等級之前對特定項目進行了評分。奇怪的是,我傳遞了一個用戶ID和對象ID,但是當我的存儲過程選擇了COUNT(*)時,我得到了錯誤的數字。MySql 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似乎忽略了平地機ID,只是檢查基於Obj_ID。我已經添加了選項以確保我的參數保持在正確的值,並且它們是。如果我只複製選擇並在別處手動執行,我會得到正確的編號。
雖然是MySql的新手,但我並不陌生於SQL本身。我只是瘋了嗎?或者我做錯了什麼?
感謝
不確定問題出在哪裏,但是你的邏輯太複雜了。 'COUNT(*)'不能返回<0(不能少於沒有行),所以你的測試應該是'IF gradecount <1 THEN INSERT'(IOW,如果這裏沒有一行存在,插入分級和obj_id)。 – 2011-06-07 20:21:39