2015-06-19 35 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