php - 尽管 MySQL 的顺序不同,但使 2 列唯一

标签 php 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 -> 例如user1user2 的处理方式与 user2user1 相同。是否可以在数据库中进行设置 - 或者我是否需要 PHP 中的其他函数进行更新?

最佳答案

我已经多次遇到这种情况,简短的答案是我认为您必须添加一些 PHP 代码来检查 user2, user1 记录是否已存在,然后再插入 user1, user2 记录。

<小时/>

或者,您可以考虑将数据库更改为如下所示:

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 验证即可。如果您希望从长远来看能够正确完成并计划执行一些更高级的查询,则应该考虑更改表结构。

关于php - 尽管 MySQL 的顺序不同,但使 2 列唯一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30938549/

相关文章:

php - CodeIgniter & DBForge - 创建数据库和表

javascript - 检测用户屏幕宽度的最佳实践是什么?

MySQL:我需要在查询中获取项目的偏移量

MySQL选择左连接为空的行

php - 通过用户 ID 在 WooCommerce 中获取单个客户的所有订单和订单数据

javascript - 有没有办法将片段附加到当前 URL

html - 如何动态更改JSP中的按钮值属性

javascript - node.js 从 mysql 堆栈中选择数据

PHP 从文件内容上传到 FTP

php - SQL 获取两列 Yes 或 No