2016-12-19 5 views
1

データベースにCSVファイルを追加する必要があります。しかし、1つのファイルを追加した後、数週間後にファイルの新しいアップデートを追加する必要があります。問題は重複した行が追加されることです。Mysqlに全く同じ3列の値を追加しないでください

私は行のIDを持っていないので、「City」、「Address」、「Location Name」と同じであるかどうか確認する必要があります。 3が一致している場合にのみ、新しい行をデータベースに入れません。

私はIGNOREを試しましたが、プライマリキーとしてのID(と私はプライマリキーを持っていません)のみで動作しているようです。

「複数のプライマリキー」スレッドも読みましたが、作成に成功しませんでした。私が言う

$query = $this->db->query(' 
      LOAD DATA INFILE "'.$path.'fichier/'.$fichier.'" 
      INTO TABLE location FIELDS TERMINATED BY ";" 
      LINES TERMINATED BY "'.$os2.'" 
      IGNORE 1 LINES ('.$name[1].','.$name[2].','.$name[3].','.$name[4].','.$name[5].','.$name[6].','.$name[7].','.$name[8].','.$name[9].','.$name[10].','.$name[11].','.$name[12].','.$name[13].','.$name[14].','.$name[15].','.$name[16].','.$name[17].','.$name[18].','.$name[19].')'); 
+0

テーブル内のデータとファイル内のデータが同じ場合は、TRUNCATE TABLEを使用してファイル(古いデータと新しいデータ)からすべてのデータをロードできます。 – Hokusai

+0

@hokusai私は3つの異なるファイルがあります:■2つのファイルがなくなるため、データを削除したり更新したファイルを追加することはできません:( – Firefly

答えて

0

誰かが私が最終的に成功する方法を知りたい場合は:

私はphpmyadminでユニークなものを作成しました。そして私の要求にはIGNOREを使用しました。

ALTER TABLE location 
    ADD CONSTRAINT iu_location UNIQUE(col1, col2, col3); 
0

、最高ステージング表に更新したCSVを読み込むために、次のようになります。

私の実際のコードは、(CodeIgniterの)です。すべてのデータがロードされたら、実際のテーブルでLEFT JOINを実行し、すべての新しいレコードを見つけて、それらの新しいレコードのみをメインテーブルに挿入します(または、すべてのデータがロードされたら、メインテーブルのすべてのデータをこの新しいステージングテーブルでフラッシュします。あなたのコメントパー

はい、あなたは新しいテーブルにデータをロードした1があなたのメインテーブルに(以下のようなものを)LEFT JOINを実行

select staging_table.id 
from staging_table 
left join main_table on staging_table.id = main_table.id 
where main_table.id is null; 
+0

新しいレコードを見つけるにはどうすればよいですか?LEFT JOINは、 – Firefly

+0

@Firefly、助けてくれれば回答を編集してください。 – Rahul

+0

私はIDを持っていないと言っていますので、複数の列で左結合を使うことはできますか? 'join main_table on staging_table.cityあなたは3つが同じであることを確認するには? – Firefly

関連する問題