求助大神,一个PHP+Mysql的项目,现从其他站点获取到了json,处理以后需要存到mysql,json里边最多可能会同时存100条数据。
本人思路:
insert into info_table (name,tel,info,time,url) values ('张三 ','15888888888','计算机系','1525765835','http://a.com,'),('李四 ','15888888881','计算机系','1525765835','http://b.com,');
但是我发现这样存储下来的结果是,如果数据库里边已经有号码tel相同的记录了,他还会再把它存下来,
tel在系统里边是唯一的,一个tel只有一条记录,所以批量存之前需要先查tel在数据库里边有没有存在,如果存在,就跳过(更新该记录的时间也行),如果不存在,就存储这条记录
表结构:
id,
name,
tel,
time,
url,
info
请求大神给一条sql解决这个问题
如果tel是唯一的,存在则更新,不存在则插入,可以用如下sql:
insert into info_table (name
,tel,info,time,url) values
('张三 ','15888888888','计算机系','1525765835','http://a.com,'),
('李四 ','15888888881','计算机系','1525765835','http://b.com,')
on duplicate key updatename
=values(name
),info=values(info),time=values(time),url=values(url)
INSERT INTO info_table ([Columns]) SELECT [Values] WHERE NOT EXISTS (SELECT * FROM info_table WHERE TEL ='xxx')
试过了,这种可以 https://my.oschina.net/jsan/blog/270161/
INSERT INTO table(field1, field2, fieldn) SELECT 'field1', 'field2', 'fieldn' FROM DUAL WHERE NOT EXISTS(SELECT field FROM table WHERE field = ?)
可以的 insert into info_table ([Columns]) SELECT [Values] WHERE NOT EXISTS (SELECT * FROM info_table WHERE TEL ='q')
这种需求用程序处理更合理吧,就是根据号码去重数据再保存啊
应该是这个吧INSERT INTO info_table ([Columns]) SELECT [Values] WHERE NOT EXISTS (SELECT * FROM info_table WHERE TEL ='xxx')
我觉得用程序去重吧,效率也高,再就是批量插入的话有条数限制的,初步可以定个1000条的批量插入。
给这几个项做一个唯一索引,数据库就会替你拦住他们了
后台从数据库查询是否有相同的,有就存null,无就存原始数据,不一定要数据库下手,浪费