2

私の Web ページには、CSV インポート セクションがあります。ユーザーは、数千のレコードをインポートする場合があります。csv の詳細を 2 つのテーブルに挿入する必要があります。

最初の表には、基本情報が含まれています。2 番目のものには、他の追加情報が含まれています。そのため、最初のテーブルの挿入 ID を 2 番目のテーブルに保存する必要があります。

上記の要件のために、2つのmysqlステートメントを書きました。しかし、インポートにはさらに時間がかかりました。ここで、単一のクエリを使用して2つのテーブルにレコードを挿入することは可能ですか?

お知らせ下さい。

4

6 に答える 6

1

一度に 2 つのテーブルに挿入することはできませんが (最初のテーブルの ID が必要なため)、次のように、最初のテーブルには 1 つずつ、2 番目のテーブルには単一のクエリを挿入できます。

$main_data = array('data1', 'data2', 'data3');
  $new_data = array();

    foreach($main_data as $data) {

      mysql_query("insert into table1 (data) values ('$data')");

      $new_id = mysql_insert_id();

      // Save the new id into an array + the data
      $new_data[$new_id] = $main;

    }

    $insert_into = array();

    // Create a new insert statement
    foreach($new_data as $new_key => $data) {
        $insert_into[] . "($new_key, '$data')"
    }

    $imploded_data = implode(',', $insert_into);

    if (count($insert_into) > 0) {

        // The result will be something like Insert into `table2` (id, value) values (1, 'data1'), (2, 'data2'),(3, 'data3');
        mysql_query("insert into `table2` (id, value) values $imploded_data");
    }
于 2013-10-11T12:40:57.567 に答える
0

いいえ、一度に 1 つのテーブルにしか挿入できません。

于 2013-10-11T10:33:26.613 に答える
0

あなたは自分のスキーマを共有していないので、同じように話します:)

私はこの道を行きます

ステップ 1.old_max_import_id =select max(id) from csv_imports;

ステップ 2. データをcsv_importsテーブルにインポートする

ステップ 3.csv_imports2次の単一のクエリを実行して、同じデータを にコピーします

insert into csv_imports2(fielda,fieldb,fieldc......)
   select fielda,fieldb,fieldc .....from csv_imports
      where id > old_max_import_id;

これは yii で簡単に実現できると思います。のテーブルにcsvデータをインポートしていると仮定していますInsertion。csv インポートで更新している場合、戦略は大幅に変わります。その場合、csv_importsテーブルの挿入/更新トリガーが役立ちます。

于 2013-10-11T17:56:05.170 に答える
0

トランザクション ( http://dev.mysql.com/doc/refman/5.0/en/commit.html ) を使用して、データの原子性を維持します。

于 2013-10-11T13:14:09.177 に答える