tp6批量插入数据,如何解决重复数据问题?
本帖最后由 comcn 于 2022-8-27 08:51 编辑比如我的mysql已经存在1,2,3,4,5这些数据,ID为主键
需要根据接口获取新数据插入数据库
现在接口的新数据是 1,2,3,4,5,6,7,8 ,直接插入$res = Db::name('table')->insertAll($data);
那么数据库的数据就变成了1,2,3,4,5,1,2,3,4,5,6,7,8
请问如何解决这种问题呢?
tp6的replace不会用,插入还是会重复
----------------------------------------
----------------------------------------
----------------------------------------
以上问题已解决:在接口获取的数据,加入id主键。我设置的id全部为1,然后插入数据库不会有重复了。
新的问题:
我把数据库数据全部删除,在重新插入,只插入了data数据最后一条
比如接口获取到50个数据,只插入了第50条,前49条都没有插入数据库,这个是哪里的原因?
因为我数据库设置了id自动加1,id只要不是空值,应该都可以插入吧
https://s1.xptou.com/2022/08/27/63096a40af7dc.jpg redis可以解决 ainkate 发表于 2022-8-26 14:32
redis可以解决
谢谢,换数据库太麻烦了,想直接从tp6入手解决
redis可以解决 comcn 发表于 2022-8-26 14:33
谢谢,换数据库太麻烦了,想直接从tp6入手解决
{:1_925:}{:1_925:}{:1_925:}{:1_925:}先百度一下什么是redis ainkate 发表于 2022-8-26 14:36
先百度一下什么是redis
{:301_998:}我的意思是redis太麻烦了 搞个唯一索引。 如果数据不是很多的话,可以插入 直接先批量查询一次数据库,筛出重复数据,在插入
数据量大的话 可以借助redis等来先进行筛选
GstYon 发表于 2022-8-26 15:00
如果数据不是很多的话,可以插入 直接先批量查询一次数据库,筛出重复数据,在插入
数据量大的话 可以借 ...
不多,就几十条数据,
直接先批量查询一次数据库,筛出重复数据,在插入
这个能给出sql语句吗
一种是可以循环检测新数据中的每条记录在数据库中是否存在,存在可以更新或跳过,不存在就插入。
另一种可以查询出数据库所有记录,用新数据比较,保留不重复数据,一次性插入。
基本是这个思路,具体代码要根据数据类型、数据格式、新数据和现有数据量之类的灵活操作了,参考TP手册,多试试