我正在尝试与 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 个查询来做到这一点。我试过使用 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/