我正在設置一個投票程序,我想限制用戶只能投一票。我有兩個表格:(a)主題表格和(b)投票表格。MYSQL只有在另一個表中不存在兩列的唯一密鑰對時,我該如何更新表?
**Subject_Table**
SID Subject Total_Votes
1 Cows 5
2 Chickens 3
**Vote_Table**
VID Subject User Voteup
1 Cows John 1
所有用戶的總票數相等。如果一個主題被投票,投票只能等於1。我做了一個獨特的值對主題和用戶用下面的語句沒有任何問題:
ALTER TABLE Vote_Table ADD UNIQUE limitvote(Subject,User);
被攝對象時投上首次以下查詢執行:
$sql="INSERT INTO Vote_Table (Subject, User,Voteup) VALUES ('$Subject', '$User', '$Voteup') ON DUPLICATE KEY UPDATE up=1";
$q = "UPDATE Subject_Table SET Total_Votes = $votes_up= //current votes plus 1;
即使由於ON DUPLICATE KEY UPDATE up = 1,John在投票表中兩次投票總是等於1。但是在Subject_Table中並非如此。沒有約束,約翰可以無限投票。約束必須是主體 - 用戶對。約束條件不能僅限於主題或用戶,因爲約翰可以投票選擇其他主題,其他用戶可以投票給奶牛。
如何檢查Vote_Table,看看獨特的主題,用戶對(牛和John))存在之前,我更新Subject_Table?
非常感謝!這工作完美。我之前嘗試過以不同形式存在的WHERE NOT EXISTS,並且無法使用它。這完全是關於語法的。至於視圖建議,我會創建一個視圖,但是我的表比我在這裏介紹的要複雜得多。感謝您的深思熟慮的建議! – tjones 2012-03-17 02:40:40
@tjones:不客氣! – ruakh 2012-03-17 02:50:01