2010-06-13 80 views
2

所以,這裏的問題(它可能是一個簡單的一個:P)Combinationally獨特的MySQL表

這是我的表結構:

CREATE TABLE `users_awards` (
    `user_id` int(11) NOT NULL, 
    `award_id` int(11) NOT NULL, 
    `duplicate` int(11) NOT NULL DEFAULT '0', 
    UNIQUE KEY `award_id` (`award_id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 

所以這是一個爲用戶獎勵制度。我不希望我的用戶多次獲得同樣的獎勵,這就是爲什麼我有'重複'字段。

我想查詢是這樣(和3樣本數據2):

INSERT INTO users_awards (user_id, award_id) 
VALUES ('3','2') ON DUPLICATE KEY UPDATE duplicate=duplicate+1 

所以我的MySQL是一個有點生疏,但我設置user_id是一個主鍵,award_id到成爲一個唯一的關鍵。這(種)創造了所需的效果。

當用戶1被授予獎勵2時,它進入。如果他/她得到這個的兩倍,只有一個行會在餐桌上,並複製將被設置爲1。再次,2等

當用戶2給出獎1項,它進入。如果他/她得到了這兩次,重複更新,等等,等等

但當用戶1給出獎1項(用戶2已經被授予後),用戶2(與獎1項)的重複字段增加並且沒有任何內容被添加到用戶1中。

對不起,如果這有點貴。真的很感謝幫助!

插孔

回答

3

您是否知道一個唯一的約束可以在列的組合上?

更改unique constraint是在(user_id, award_id)。事實上,這應該是表格的主要關鍵。然後你的查詢應該按照你的意圖工作。

+0

謝謝!我不知道,唯一的contraint可能是多個列...我想這是非常重要的! :D我已經添加了這個,現在所有的工作都如預期的那樣。乾杯! – Jack 2010-06-13 09:36:59