【问题标题】:PHP my admin no Ignore duplicate rows option for importing CSV files [duplicate]PHP我的管理员没有用于导入CSV文件的忽略重复行选项[重复]
【发布时间】:2014-09-01 14:25:19
【问题描述】:

我有一个已成功导入数据库表的 CSV 文件。

随着时间的推移,我将使用新数据更新此 CSV 文件,因此我想知道是否导入包含已插入表中的行的同一文件,有没有办法避免再次添加重复项?。

在研究时,我遇到了一个名为“忽略重复行”的选项,但是在导入选项中我不存在此选项。

我正在使用打包在 XAMPP 中的 PHP my admin。

即版本信息:4.2.7.1,最新稳定版本:4.2.8

【问题讨论】:

  • 试过了还是不行,还是重复了
  • 你的表有唯一索引吗?
  • 是的,每一行都有一个自动递增的主键
  • 如果存在呢,否则呢? blogs.msdn.com/b/miah/archive/2008/02/17/…您可以修改更新以跳过记录。
  • @user3364963 您需要在您想要唯一的列上创建唯一索引(可能是除 pk 之外的所有列)

标签: php mysql csv phpmyadmin


【解决方案1】:

为您认为应该是唯一的数据库列添加唯一键

这是我为上传 csv 文件所做的代码,它将停止插入找到的值,也许它会对您有所帮助。

使用重复密钥更新

<?php
$conn=mysql_connect("localhost","root","");
$db=mysql_select_db("dbname");


 $csv_file="/path/to/file";
 $savefile="filename.csv";
 $handle = fopen($csv_file, "r");

$i=0;
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { //2nd param is for memory limit use it if u know what u are doing
    if($i>0){

        $import="INSERT into table_name(col0,col1,col2,col3)values('".addslashes($data[0])."','".addslashes($data[1])."','".addslashes($data[2])."','".addslashes($data[3])."')ON DUPLICATE KEY UPDATE col2= '".addslashes($data[1])."'";
        mysql_query($import) or die(mysql_error());
    }
    $i=1;
}   
?>   

干杯

【讨论】:

  • 谢谢,我用 PHP 做到了。我检查重复的方式有点不同,因为我处理的是彩票结果(不能有两个相同日期的结果)。我只是运行一个查询来获取最新日期和最早日期将其存储在变量中,然后将 CSV 中的日期与此日期进行比较(以 UNIX 时间戳格式)。如果 CSV 中的日期大于最新日期,则添加它。如果它小于最早的那么是历史结果,所以添加它。
猜你喜欢
  • 2014-02-24
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 1970-01-01
  • 2014-04-25
  • 2017-11-15
  • 2020-11-03
  • 1970-01-01
相关资源
最近更新 更多