【问题标题】:Update on dulipcate entry while Import Excel file - php mysql导入 Excel 文件时更新重复条目 - php mysql
【发布时间】:2016-10-17 13:16:50
【问题描述】:

我需要检查在 import excel file 时是否在数据库中插入值,如果它已经在数据库中具有值,那么它应该得到更新。

下面是数据库中的 producttab 表值

prdid | prdname 
00A   |  prd1
00B   |  prd2
00C   |  prd3
00D   |  prd4

以下是EXCEL FILE数据

prdid | prdname 
00A   |  prdnew
00B   |  prd2new
00E   |  prd8
00H   |  prd9

所以如果我上传上面的excel文件,那么,

00A , 00B 应该在 producttab 表中获得更新,因为它们已经存在于那里......但是 00E,00H 应该得到插入

*下面是我尝试过的,价值正在正确插入 只有 UPDATE 没有发生,我的意思是 IF..ELSE 条件是完美的,只有 UPDATE 不正常 *

if(isset($_POST["Upload"]))
{
    $fileinfo = pathinfo($_FILES["uploadFile"]["name"]);

    $filetype = $_FILES["uploadFile"]["type"];
    $remark = NULL;

    //Validate File Type
    if(strtolower(trim($fileinfo["extension"])) != "csv")
    {
        $_SESSION['msg_r'] = "Please select CSV file";
        header("location:importfile.php");
        exit;
    }
    else
    {
        $file_path = $_FILES["uploadFile"]["tmp_name"];
    }

$row = 0;

$tempFileName = time().".csv";

if ( is_uploaded_file( $file_path ) ) {
    $fileCopied = copy( $file_path , $tempFileName);


if (($handle = fopen($tempFileName, "r")) !== FALSE) {
   fgetcsv($handle);   
   while (($data = fgetcsv($handle, 6000, ",")) !== FALSE) {
        $num = count($data);
        for ($c=0; $c < $num; $c++) {
          $col[$c] = $data[$c];
        }

$col1 = $col[0]; // prdid
$col2 = $col[1]; // prdname   

$sql = "SELECT prdid FROM producttab WHERE prdid = '".$col1."' ";
$query = db_query($sql);
$pfetech = db_fetch($query);

// ABOVE select QUERY IS PERFECT , it taking me to if conditions 

if($col1 == $pfetech['prdid']){

  // only below update not happening 

    $sqlup = "UPDATE producttab 
              SET prdid = ".$pfetech['prdid'].",
                  prdname = ".$col2."  ";
    $sqlup .= " WHERE prdid = ".$pfetech['prdid']." ";    
    $resultsqlupdate = mysql_query($sqlup);

}else{    

$query = "INSERT INTO producttab(prdid,prdname) VALUES('".$col1."','".$col2.")"; 
$s = mysql_query($query);

}


 }
    fclose($handle);
}
    echo "<center>File data imported to database!!</center>";                            
 }
} 

} 

下面是 UPDATE 查询的打印/回显,

update producttab set prdname='prdnew' WHERE prdid='00A'
update producttab set prdname='prd2new' WHERE prdid='00B' 

prdname 的值根据 excel 文件正确显示 .... 只有更新没有发生 ....

【问题讨论】:

  • 这里的任何人......请告诉我有什么问题......
  • 您可以使用存在查询,然后您可以根据 if 决定更新或插入。
  • 你的意思是IN CLAUSE ?? ...但是我怎么能像 $col1 一样价值... 00A00B ...一起 ...你能帮我吗
  • 您可以使用 INSERT IGNORE 子句,并在标识行的列上创建唯一索引。
  • 嗨,Afshan,感谢您的回复,但我只想更新那个 prdid .. 以备将来使用...那是当我在数据库中插入值以及更新时...等许多记录...因此进行更新

标签: php mysql excel sql-update insert-update


【解决方案1】:

您可以使用exists查询来检查数据库中是否存在,以下是查询

 select  exists(select 1 from producttab where prdid='".$col1."');

如果它退出,它会给你 1,如果不退出,它会给你 0,然后在 if else 条件上做进一步的插入或更新

并且只设置一件事而不是像这样

  "UPDATE producttab 
          SET  prdname = ".$col2."
  $sqlup .= " WHERE prdid = ".$pfetech['prdid']." "; 

抱歉,您需要更新 prdname 而不是 prdid 。 编辑了我的答案

ps。 你应该为此使用 mysql import from csv query 这是寻求帮助的链接 http://www.mysqltutorial.org/import-csv-file-mysql-table/

【讨论】:

  • 嗨 Asad,感谢您的回答……但问题不在于选择……问题在于更新……当我回显/打印我的更新查询时……结果如下…… . update producttab set prdid='00A' WHERE prdid='00A' update producttab set prdid='00B' WHERE prdid='00B'...不知道怎么回事..
  • 对不起@user3209031 你需要更新prdname而不是prdid,我已经编辑过了
  • 我做到了...但不工作我收到消息“文件数据已导入数据库!!”但在数据库中 VALUE IS NOT UPDATE ..我的意思是 prdname 没有更新 ..它显示相同的旧它的价值
  • 是否存在适合您的查询?它是一个查询以检查数据库中是否存在记录
  • 知道为什么它不更新......但是如果我回显/打印我的更新查询......它向我展示......更新 producttab set prdname='prdnew' WHERE prdid='00A'更新 producttab set prdname='prd2new' WHERE prdid='00B' .... 但是数据库中的值没有更新 ...但是..如果我复制此查询并从 phpmyadmin sql update ...然后值是 UPDATE ...
猜你喜欢
  • 2018-04-05
  • 2013-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-14
  • 1970-01-01
  • 1970-01-01
  • 2021-07-10
相关资源
最近更新 更多