comcn 发表于 2022-8-26 14:22

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

ainkate 发表于 2022-8-26 14:32

redis可以解决

comcn 发表于 2022-8-26 14:33

ainkate 发表于 2022-8-26 14:32
redis可以解决

谢谢,换数据库太麻烦了,想直接从tp6入手解决

iawyxkdn8 发表于 2022-8-26 14:34


redis可以解决

ainkate 发表于 2022-8-26 14:36

comcn 发表于 2022-8-26 14:33
谢谢,换数据库太麻烦了,想直接从tp6入手解决

{:1_925:}{:1_925:}{:1_925:}{:1_925:}先百度一下什么是redis

comcn 发表于 2022-8-26 14:37

ainkate 发表于 2022-8-26 14:36
先百度一下什么是redis

{:301_998:}我的意思是redis太麻烦了

Do_zh 发表于 2022-8-26 14:39

搞个唯一索引。

GstYon 发表于 2022-8-26 15:00

如果数据不是很多的话,可以插入 直接先批量查询一次数据库,筛出重复数据,在插入

数据量大的话 可以借助redis等来先进行筛选

comcn 发表于 2022-8-26 15:01

GstYon 发表于 2022-8-26 15:00
如果数据不是很多的话,可以插入 直接先批量查询一次数据库,筛出重复数据,在插入

数据量大的话 可以借 ...

不多,就几十条数据,
直接先批量查询一次数据库,筛出重复数据,在插入
这个能给出sql语句吗

lxxtoday 发表于 2022-8-26 15:04

一种是可以循环检测新数据中的每条记录在数据库中是否存在,存在可以更新或跳过,不存在就插入。
另一种可以查询出数据库所有记录,用新数据比较,保留不重复数据,一次性插入。
基本是这个思路,具体代码要根据数据类型、数据格式、新数据和现有数据量之类的灵活操作了,参考TP手册,多试试
页: [1] 2 3 4 5
查看完整版本: tp6批量插入数据,如何解决重复数据问题?