php - 忽略重复行

标签 php mysql

我正在将一些数据从 csv 文件导入 MySQL 并试图忽略重复的行。

mysql_query("INSERT IGNORE INTO products (parent_product_url, child_product_url, swatch) VALUES ('".$row[0]."', '".$row[1]."', '".$row[2]."')");

我的 csv 文件。

polo.htm,red.htm,red.jpg
polo.htm,green.htm,green.jpg
round-neck.htm,green.htm,green.jpg

现在,如果我在 csv 文件下运行,它应该忽略前三行,因为它们已经存在于表中。它应该只插入第四行。

polo.htm,red.htm,red.jpg
polo.htm,green.htm,green.jpg
round-neck.htm,green.htm,green.jpg
v-neck.htm,red.htm,red.jpg

最佳答案

我更喜欢 on duplicate key update 因为 insert ignore 会忽略所有错误,而不仅仅是重复错误。

无论您使用哪种,您的问题可能是缺少唯一约束/索引。

您没有具体说明“重复”的含义。假设您指的是所有列:

create unique index unq_products_3 on products(parent_product_url, child_product_url, swatch);

注意:用于索引的键有最大长度,具体取决于存储引擎。如果您的列太长,您可能需要考虑其他方法。

关于php - 忽略重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33136803/

相关文章:

php - 如何在docker上同时运行多个项目

javascript - 使用模式弹出查看器显示目录中的 PHP 图像

php - 插入单选按钮的值

mysql - 如何识别缺少索引的慢速查询?

mysql - MySQL 数据库中有一列 LONGTEXT 的内存消耗

php - JavaScript QR 码阅读器 - 可以吗?或者,远程服务?

php - 从 Slim Framework 调用 Mysql 函数

如果另一个值不为空,则 mysql 更新值

MySQL - 选择检索最后的日期时间

php - 如何在 php 验证无效 = true 后停止删除表单输入数据?