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

标签 php mysql performance

我正在尝试与 Facebook PHP APK 一起制作邀请系统。我基本上想要的是,当您邀请您的 friend 时,Facebook 会使用一个包含用户邀请的 friend 的用户 ID 的数组重定向回您的网站。我希望遍历它们并将邀请插入数据库。循环和一切都已经在控制之下,但数据库查询不是。

这是我当前的查询:

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,但那只会给我错误并放弃。

我希望你明白我在寻找什么。谢谢大家的宝贵时间!

最佳答案

有适合​​您需要的东西:

INSERT ... ON DUPLICATE KEY UPDATE 语法:

If you specify ON DUPLICATE KEY UPDATE, and a row is inserted that would cause a duplicate value in a UNIQUE index or PRIMARY KEY, an UPDATE of the old row is performed. For example, if column a is declared as UNIQUE and contains the value 1, the following two statements have identical effect:

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

插入忽略:

If you use the IGNORE keyword, errors that occur while executing the INSERT statement are ignored. For example, without IGNORE, a row that duplicates an existing UNIQUE index or PRIMARY KEY value in the table causes a duplicate-key error and the statement is aborted. With IGNORE, the row still is not inserted, but no error occurs.

关于php - 插入但如果重复则忽略,如果存在于另一个表中则设置不同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20321885/

相关文章:

PHP 按时间对数组进行排序并找到与 X 数字最接近的匹配项

php - 我没有得到这个脚本的输出

java - 快速截屏Java

php - 我想知道一个对象是否在我的 Doctrine Collection 中

php - 更新数据透视列值

php - 即使没有明显的冲突,Composer 也不会安装

mysql - 升级 MAMP 后找不到旧的 MySQL 数据库

javascript - Highcharts 使用 json 将点添加到折线图

mysql - 按索引查询慢搜索 LIKE% MYSQL

ios - Titanium:ScrollView 加载缓慢