如果关系表中的键不存在PHP MySQL insert

如果关系表中的键不存在PHP MySQL insert,php,mysql,database,Php,Mysql,Database,我是MySQL语言新手。我在插入关系数据时发现一些问题。我有一个存储用户友谊的表。假设user1id=1和user2id=2 他们是朋友。然后,我将信息存储在friend表中,如下所示: 朋友桌 user_id1 | user_id2 1 2 user_id1 | user_id2 1 2 user_id1 | user_id2 1 | 2 2 | 1 但是,我的php文件中的某些操作可能会再次检查这两

我是MySQL语言新手。我在插入关系数据时发现一些问题。我有一个存储用户友谊的表。假设user1id=1和user2id=2 他们是朋友。然后,我将信息存储在friend表中,如下所示:

朋友桌

user_id1 | user_id2
  1           2
user_id1 | user_id2
  1           2
user_id1 | user_id2
  1      |    2
  2      |    1
但是,我的php文件中的某些操作可能会再次检查这两个用户的关系,然后插入/更新友谊信息

1使用用户_id1检查用户,然后使用插入重复密钥更新友谊信息

INSERT INTO friend (user_id1, user_id2) VALUES ('1', '2') 
ON DUPLICATE KEY UPDATE user_id2=user_id2
朋友表仍然正确,因为未更改任何内容:

朋友桌

user_id1 | user_id2
  1           2
user_id1 | user_id2
  1           2
user_id1 | user_id2
  1      |    2
  2      |    1
但是,如果首先从user2开始检查,则会再次插入友谊信息

朋友桌

user_id1 | user_id2
  1           2
user_id1 | user_id2
  1           2
user_id1 | user_id2
  1      |    2
  2      |    1
有任何SQL语句可以防止这种情况发生吗


感谢您的回答,并为我糟糕的英语表示歉意。

对于SQL,这只是新数据,而在本例中,1,2实际上与2,1相同。我不知道是否有用于此的SQL函数。但在将值发送到SQL之前,检查php中的值可能是合适的

由于不了解PHP代码,您可以尝试以下方法

$data = array('user_id1' => 2, 'user_id2' = 1);
arsort($data); //now the lowest id is always first

$user_id1 = current($data);
$user_id2 = next($data);

//send to SQL

希望这可以引导您朝着正确的方向前进

您可能能够通过触发器检查这一点。如果存在,请尝试使用if-else。从friend中选择*,其中user_id1='1'和user_id2='2'或user_id1='2'和user_id2='1',然后在friend中插入user_id1,user_id2值'1',2'结束if@巴尔马感谢您的评论。但我不知道如何创建触发器。稍后我会尝试。@user1702477我想实现的mysql_查询函数不起作用。你的意思是我应该总是先插入最低的id?这是个好主意。谢谢