1

クエリを使用して、あるテーブルから別のテーブルにデータを移動していINSERT INTO table1 SELECT * FROM table2ます。移動中のデータには、従業員に関する情報 (名、姓など) と、その従業員の履歴書へのパスが含まれています。私は現在、その情報を 2 つの異なるテーブルに分割しようとしています。1 つは従業員情報用のテーブル、もう 1 つはドキュメント (履歴書) 情報用のテーブルで、従業員 ID をドキュメント テーブルに入れることで 2 つをリンクします。従業員 ID とドキュメント ID の両方が、自動インクリメントされた PK 値になります。

last insert idこれらのクエリを for ループに入れて、一度に 1 行ずつ移動し、employee テーブルの を取得してから、ドキュメント テーブルにドキュメント情報を追加して 2 つをリンクできることを理解しています。元のテーブルから複数の行を取得し、情報を分割して2つの新しい/異なるテーブルに挿入し、従業員で自動生成されたIDを使用できる、1つのクエリでこれを行う方法があるかどうか興味がありますtable をドキュメント テーブルの値として....これが理にかなっていることを願っています!

4

1 に答える 1

2

間違っていたら申し訳ありませんが、現在の DB テーブルでこのクエリを 1 回実行しますか? そして、両方のテーブルに同じ量の行があると思います(そして、互いの順序で)?

これらを分割すると、次のようになります。

たとえば、従業員テーブル:

 - employee_id(auto_increment)
 - employee_firstname
 - employee_lastname
 - employee_document_id
 - +whatever you want etc

ドキュメント テーブルの例:

 - document_id(auto_increment)
 - document_name
 - document_path
 - document_employee_id
 - +whatever you want etc.

これがあなたの言いたいことなら、私は次のことがうまくいくと思います:

1: PDO のセットアップ (エディターが機能しなかったので、">")

    <?php

    $config['db'] = array(
        'host' => 'host',
        'username' => 'username',
        'password' => 'password',
        'dbname' => 'dbname'
    );

    $db = new PDO('mysql:host=' . $config['db']['host'] . ';dbname=' . $config['db']['dbname'], $config['db']['username'], $config['db']['password']);

    ?>

2: 挿入クエリを設定する


<?php
$select_query = "SELECT * FROM table1"; 
//$db is PDO example name
$select_all = $db->prepare($select_query);
$select_all->execute();
$count = $select_all->rowCount();
for(var i = 0; i =< $count; ++i) { 
    $insert_query1 = "INSERT INTO table1 (employee_firstname,
    employee_lastname, employee_document_id)
    VALUES(employee_firstnameValue, employee_lastnameValue,'"i"'";

    $insert_query2 = "INSERT INTO table2 (document_name, document_path,
    employee_id) VALUES(document_nameValue, document_pathValue, '"i"')"

    $insert_table1 = $db->prepare($insert_query1);
    $insert_table1->execute()

    $insert_table2 = $db->prepare($insert_query2);
    $insert_table2->execute()
}
?>

1から始まるauto_incrementを取得すると、毎回en de ++iが発生するため、上記が機能すると思います。したがって、employee_document_id と document_employee_id は、auto_increment が (これも 1) であるのと同様に、両方とも ++i (1) になります。

しかし、これは考えすぎかもしれません..または、あなたのモデルではうまくいきません

補足:

  • クエリではパラメーターを使用することをお勧めします。
  • これは私の頭に浮かんだ大まかな説明方法です(ここから何かを拾うことができるかもしれません..)

編集:別の解決策は、「SELECT MAX」のようなクエリを使用することですが、これは安全ではありません。

于 2013-09-10T13:10:33.590 に答える