如果重复则插入但忽略,如果存在于另一个表中则设置不同的值


Insert but ignore if duplicate AND set a value different if exist in another table

我正在尝试将邀请系统与Facebook PHP APK一起制作。我基本上想要的是,当你邀请了你的朋友后,Facebook会用一个数组重定向回你的网站,该数组包含用户邀请的朋友的用户ID。我希望循环浏览它们,并将邀请插入数据库。循环和all已经在控制之下,但数据库查询没有。

这就是我当前的查询:

SELECT `iID` FROM `invitations` WHERE `iSender` = 'SENDER' AND `iReceiver` = 'RECEIVER';

如果返回零行,我将处理此查询:

INSERT INTO `invitations` (`iSender`, `iReceiver`) VALUES ('SENDER', 'RECEIVER');

然后我检查他们是否已经注册到我的网站:

SELECT `uID` FROM `users` WHERE `uOAuthID` = 'RECEIVER';

如果它返回超过1行,我运行以下也是最后一个查询:

UPDATE `invitations` SET `iProcessed` = 1 WHERE `iReceiver` = 'RECEIVER';

因此,基本上这就是目前流程的形成方式:

  1. 如果邀请方尚未邀请用户,我们会将邀请插入数据库
  2. 然后我们检查被邀请的用户是否已经注册
  3. 如果他已经注册,我们会更新邀请,并表示已经处理完毕

我想有一种更好更快的方法可以做到这一点,只需要1或2个查询。我试过使用INSERT IGNORE和ON DUPLICATE,但这只是给了我错误,我放弃了

我希望你明白我在找什么。感谢大家抽出时间!

有适合您需求的东西:

插入。。。ON重复密钥更新语法:

如果指定ON DUPLICATE KEY UPDATE,并且插入一行会导致UNIQUE索引或PRIMARY KEY中的值重复执行旧行的UPDATE。例如,如果列a为声明为UNIQUE并包含值1,以下两个声明具有相同的效果:

INSERT INTO表(a,b,c)VALUES(1,2,3)ON DUPLICATE KEY UPDATEc=c+1;

插入忽略:

如果使用IGNORE关键字,则在执行INSERT语句被忽略。例如,如果没有IGNORE重复表中现有的UNIQUE索引或PRIMARY KEY值导致重复键错误,该语句被中止。具有忽略,行仍然没有插入,但没有发生错误。