1

データが存在するかどうかを知りたかったのですが、mysql 更新クエリが存在する必要があります。それ以外の場合は、データを mysql テーブルに挿入します。

私がやったことは、fgetcsv()関数を使用して .csv ファイルから mysql にデータをフェッチしていることです。次に、csv から各行を読み取り、それらの 4 つの値を 4 つの変数に入れ、更新クエリを実行します。データの1つが存在しない場合でも更新クエリが機能していることを確認するにはどうすればよいですか(0行が正常に更新されました)、そのデータを特定し、それをテーブルに挿入します。データが存在する場合、更新クエリが機能します。

product_entity_price テーブルにデータを更新または挿入したいと考えています。私のスクリプト-:

    if(($handle = fopen("/data/sample/items_0420.csv", "r")) !== FALSE) 
    {          
         while (($data = fgetcsv($handle, 8000, ",")) !== FALSE)      
         {
        $num = count($data);
        for ($c=0; $c < $num; $c++) 
        {             
            $temp = $data;             
            $string = implode(";", $temp);           
        }
            $pieces = explode(";", $string);               
            $col1 = $pieces[0];
            $col2 = $pieces[1];         
            $col3 = $pieces[2];               
            $col4 = $pieces[3]; 

    $query_insert = "INSERT INTO import_prices (customer_id, sku, price, website) ".             
    "VALUES($col1,'$col2',$col3,'$col4') ".             
    "ON DUPLICATE KEY UPDATE customer_id=$col1, price=$col3,website='$col4' "; 
        $result = mysql_query($query_insert);

             $query_update = "UPDATE  product_entity_price pep 
             JOIN   catalog_product cp   ON    cp.entity_id = pep.entity_id    
             AND    cp.sku LIKE '$col2'   AND   website_id = $col4 
             JOIN   customer_group cg   ON    cg.customer_group_id = pep.customer_group_id   AND   cg.customer_group_code =  $col1 
SET cpetp.value = ".$col3.";";
             mysql_query($query_update);
          }
    }
4

4 に答える 4

2

mysql コマンド replace を確認します。

http://dev.mysql.com/doc/refman/5.0/en/replace.html

于 2012-04-20T13:59:22.383 に答える
1

私はあなたが欲しいのはMySQLUPSERT、別名INSERT ... ON DUPLICATEKEYUPDATEだと思います。

于 2012-04-20T13:58:09.950 に答える
1

重複して再度挿入された場合に行が削除されても構わない場合は、REPLACEを使用できます。

REPLACE into table (col1, col2) values(val1, val2)
于 2012-04-20T13:58:33.233 に答える
1

私はいつも、次の 2 つのクエリを使用するのが最も信頼できると考えています。

$result = mysql_query("SELECT 1 FROM import_prices WHERE ...");
list($exists) = mysql_fetch_row($result);

if ($exists)
    $result = mysql_query("UPDATE import_prices ...");
else
    $result = mysql_query("INSERT INTO import_prices ...");

このアプローチの欠点は、1 つではなく常に 2 つのクエリを作成することです。ただし、このアプローチは、リレーショナル テーブルのように主キーを持たないテーブルでも機能します。

更新クエリを実行してから、mysql_affected_rowsそれが 0 かどうかを確認して挿入することもできますが、警告が表示されます。更新を実行し、古い値がすべて新しい値と同じである場合mysql_affected_rowsでも、0 が返されます。

于 2012-04-20T14:13:45.130 に答える