【问题标题】:inserting .csv values to database with an update insert query使用更新插入查询将 .csv 值插入数据库
【发布时间】:2014-06-21 11:04:39
【问题描述】:

我有一个 .csv 文件,它的数据被插入到数据库中,但我的代码有一个缺点,比如

如果我的 .csv 文件包含一行并将其插入到 db 中,那么要插入更多行,用户应从 .csv 中删除第一行并输入新行值,然后它将在我的 db 中插入其他重复键条目作为列有唯一的密钥。

我用于将 .csv 插入 mysql 的代码。

<?php
//db connection goes here
$csv_file="/var/www/html/141.csv";
 $savefile="141.csv";
  $handle = fopen($csv_file, "r");

$i=0;
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
if($i>0){
$import="INSERT into  lead141(urn,phone)values('".addslashes($data[0])."','".addslashes($data[1])."')";
mysql_query($import) or die(mysql_error());
}
$i=1;
}

$test="select * from lead141
where phone in (select phone from dnc)";
$query=mysql_query($test);
$testing=count($query);
echo "matched rows".$testing; 

?>   

我的mysqllead141表结构

    CREATE TABLE `lead141` (
 id int(100) NOT NULL AUTO_INCREMENT,
 urn int(100) NOT NULL,
 phone bigint(20) NOT NULL,
 PRIMARY KEY (`id`),
 UNIQUE KEY `phone` (`phone`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=latin1

我的 141.csv 文件

urn    phone
141     20134325
141     20985675

如果我运行我的代码 141.csv 插入数据库,但当用户在 141.csv 中添加新行时,用户应删除以前的行并将新行添加到 141.csv 以进行插入。

我需要让我的代码工作以将新值从 141.csv 插入到 db 中,即使旧值存在于 .csv 中。我认为如果我放置一条更新语句然后插入,那么它就可以解决问题。

我是否进入了正确的逻辑路径?请帮忙

【问题讨论】:

  • 为什么不改用LOAD DATA INFILE?使用REPLACE | IGNORE 视情况而定
  • 朋友,3年前,我从事DNC系统工作。那时我使用 PhoneNumber 作为 Bigint 数据类型的主键。那么您将无需使用唯一键。
  • 实际上我在这里缩短了我的列列表。

标签: php mysql csv


【解决方案1】:

尝试像这样使用INSERT ... ON DUPLICATE KEY UPDATE Syntax

$import="INSERT INTO lead141(urn,phone)values('".addslashes($data[0])."','".addslashes($data[1])."') ON DUPLICATE KEY UPDATE phone= '".addslashes($data[1])."'";

因为phone 列是UNIQUE KEY

【讨论】:

    【解决方案2】:

    您也可以使用INSERT IGNORE INTO ...,但我更喜欢ON DUPLICATE KEY UPDATE ... 功能,因为:

    "INSERT IGNORE" vs "INSERT ... ON DUPLICATE KEY UPDATE"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-01
      • 2021-10-21
      • 2017-04-23
      相关资源
      最近更新 更多