我有一个PHP数组,我想从这个数组中插入MySQL表中尚未存在的项目。搜索后我可以使用以下代码逐项完成此项
INSERT INTO `rtusers` (`Status`, `MSISDN`)
SELECT * FROM (SELECT 0, '966111111111') AS tmp
WHERE NOT EXISTS (
SELECT `MSISDN` FROM rtusers
WHERE MSISDN = '966111111111' ) LIMIT 1;
但问题是我在数组中有数百个项目。如果我将此代码用作循环,则会对数据库进行数百次点击。有没有人有更简单的解决方案?
答案 0 :(得分:1)
您应该将数组直接加载到某种临时表中。您可以使用单个插入语句或使用load data infile
或其他一些批量加载机制来执行此操作。
然后忽略记录,在rtusers(mission)
上定义唯一索引并使用:
insert into rtusers(status, mission)
select status, mission
from rtusers_staging
on duplicate key update mission = values(mission);
on duplicate key
部分没有做任何事情。它只是忽略了任何重复的记录。
答案 1 :(得分:0)
创建一个包含新数字名称new_users的表,然后执行此查询:
INSERT INTO `rtusers` (`Status`, `MSISDN`)
SELECT Status, MSISDN from new_users
WHERE MSISDN NOT IN (SELECT MSISDN FROM rtusers);