我正在为我的客户设置一个上传器(使用PHP),他们可以在其机器上选择CSV(以预先确定的格式)上传。 CSV可能会有4000-5000行。 PHP将通过读取CSV的每一行并将其直接插入DB表来处理文件。那部分很容易。

但是,理想情况下,在将这些数据附加到数据库表之前,我想查看3列(a,b和c)的3列,并检查我是否已经在表中有这3个字段的匹配组合以及是否因此,我宁愿更新该行而不是附加。如果我没有这3列的匹配组合,我想继续插入行,将数据附加到表中。

我的第一个想法是,我可以在表中制作a,b和c一个唯一的索引,然后插入每一行,检测一个“失败”插入(由于我的唯一索引的限制),然后以某种方式进行更新。似乎这种方法比必须为每一行进行单独的选择查询更有效,只是看看我的表是否已经有一个匹配的组合。

第三种方法可能是简单地添加所有内容,不使用MySQL唯一索引,然后仅当客户稍后查询该表时才能抓住最新的唯一组合。但是,我试图避免在该表中拥有大量无用的数据。

关于最佳实践或聪明方法的想法?

有帮助吗?

解决方案

如果将3列制作为唯一的ID,则可以使用重复键进行插入。

INSERT INTO table (a,b,c,d,e,f) VALUES (1,2,3,5,6,7)
  ON DUPLICATE KEY UPDATE d=5,e=6,f=7;

您可以在此处阅读有关此方便技术的更多信息 MySQL手册.

其他提示

如果您在(a,b,c)列上添加唯一索引,则可以使用 代替 在一个声明中这样做:

替换工作完全像插入物一样,除了表格中的旧行与主键或唯一索引的新行相同的值,则在插入新行之前删除旧行...

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top