2015-06-19 45 views
0

我有我的數據庫中的兩個字段與唯一鍵的約束。我需要這兩個字段是唯一的,因爲我使用它來確定是否要插入重複項,而只是更新字段。 這是插入查詢/更新它們:儘管命令使2列唯一MySQL

INSERT INTO quiz(player1, player2, array, email1, email2) 
VALUES (:user1, :user2, :quests, :email1, :email2) 
ON DUPLICATE KEY UPDATE player1=:user1, player2=:user2, array=:quests, email1=:email1, email2=:email2" 

獨特的領域是player1player2

這樣可以正常工作,但它計算值插入player1player2字段的順序。因此我希望將值插入到player1,player2 - >例如user1,user2user2,user1相同。是否可以在數據庫中設置它 - 或者我需要PHP中的其他功能來更新?

+0

所以你有一個名爲'player1'的字段和一個名爲'player2'的字段,但是你不區分它們嗎?你真正想要的是將一些數據鏈接到2個'player's? – Eborbob

+0

我會區分它們 - 用戶名必須在單獨的字段中 - 但是我不希望兩個不同的行用於一對相同的玩家 - 如果要輸入相同的玩家名稱,我只想更新他們的行 - 不創建一個新的。 – kiria67

回答

0

我遇到過這種情況很多次,簡單的回答是,我認爲你必須添加一些PHP代碼來檢查user2,user1記錄在插入user1,user2記錄之前是否已經存在。


或者,你可以考慮改變DB到這樣的事情:

Matches Table 
id 
created_at 
updated_at 

Participants Table 
id 
user_id 
match_id 
created_at 
updated_at 

Users table 
id 
username 
email 
etc... 

Quiz Table 
id 
match_id 
etc... 

這似乎是更多的工作在第一,但它已被證明是一個更容易的工作與在長時間運行,因爲如果您計劃進行更高級的查詢,它可以讓您更輕鬆地查詢數據。然後你可以在user_id和match_id上做一個唯一的索引。如果你所需要的只是快速和骯髒地完成它,那麼就用你已經擁有它的方式去做,然後添加一些PHP驗證。如果您希望從長遠來看能夠正確完成並計劃進行更高級的查詢,則應考慮更改表結構。

+0

太棒了!謝謝你的回答! :) – kiria67