DIRK:
(私はそれを少し簡略化されましたが、現実には多くの関連するテーブルと複数の列がある)2つのテーブルを考慮すると:
TABLE 'visit'
-------------
- id (auto increment)
- visit_country
- visit_browser
TABLE 'pageview'
----------------
- id
- visit_id (relates to visit.id)
- page_url
毎日、私はこれらのテーブルに周り100.000訪問や400.000ヒットでPHPの配列を挿入します。このプロセスをスピードアップする方法はです
- 1つのクエリーに複数のインサートを追加
- およびトランザクションにクエリの全体の束を包みます。
しかし、私の問題は、ページビューを挿入するために、親の訪問の最後の挿入IDが必要とされることです。聞かせてのは、1000回の訪問は、1つのクエリを使用して挿入されていると言うの取引では、私はもはやPDOのにおけるlastInsertId()メソッドを使用することはできません。
理想的には私は1つのトランザクションにすべてを保ちます。少ない理想的なソリューションは、すべての訪問を挿入し、参照列を追加し、そして実行し、各訪問が得たIDチェックして、ヒットを挿入するために新しいトランザクションを使用することです。しかし、それは理想からほど遠いです。
何がこれをアプローチする方法でしょうか?どのようにORMの教義などは、この問題を解決するのです(私はここでPDOを通じて生のSQLに依存する必要がありますか)?
Ronak Dhoot:
あなたはこのようなクエリ何かを作る行うことができます
$sql = "INSERT INTO `visit` (`id`, `visit_country`, `visit_browser`)
VALUES (NULL, :visit_country, :visit_browser);
INSERT INTO `pageview` (`visit_id`, `page_url`)
VALUES (NULL, LAST_INSERT_ID(), :page_url)";
、準備bindparam&実行より