【问题标题】:PHP MySQL insert if not exist on keys in relation table如果关系表中的键不存在 PHP MySQL 插入
【发布时间】:2013-07-16 17:07:10
【问题描述】:

我是 MySQL 语言的新手。我发现插入关系数据有些麻烦。我有一张用于存储用户友谊的表格。假设 user1(id =1) 和 user2(id =2) 是朋友。然后,我将信息存储在朋友表中,如下所示:

好友表

user_id1 | user_id2
  1           2

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

1) 使用 user_id1 检查用户,然后更新好友信息(使用 insert ON DUPLICATE KEY)。

INSERT INTO friend (user_id1, user_id2) VALUES ('1', '2') 
ON DUPLICATE KEY UPDATE user_id2=user_id2

朋友表仍然正确,因为没有任何改变:

好友表

user_id1 | user_id2
  1           2

但如果先从user2开始检查,则重新插入好友信息

好友表

user_id1 | user_id2
  1      |    2
  2      |    1

是否有任何 SQL 语句可以防止这种情况发生?

感谢您的回答,对不起我的英语不好

【问题讨论】:

  • 您可以使用触发器来检查这一点。
  • try if else IF (EXISTS(SELECT * FROM friend WHERE (user_id1 = '1' and user_id2='2') or (user_id1 = '2' and user_id2='1'))) THEN ELSE INSERT INTO 朋友 (user_id1, user_id2) VALUES ('1', '2') END IF;
  • @Barmar 感谢您的评论。但我不知道如何创建触发器。我稍后会尝试。
  • @user1702477 它不适用于我想要实现的 mysql_query() 函数。

标签: php mysql database


【解决方案1】:

对于 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

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

【讨论】:

  • 你的意思是我应该总是先插入最低的id?这是个好主意。谢谢!
猜你喜欢
  • 2014-04-14
  • 2015-06-09
  • 1970-01-01
  • 2011-08-12
  • 1970-01-01
  • 2018-07-03
  • 1970-01-01
  • 1970-01-01
  • 2011-01-14
相关资源
最近更新 更多