Рассматривая две таблицы (я немного упростил это, в действительности есть больше связанных таблиц и больше столбцов):
TABLE 'visit'
-------------
- id (auto increment)
- visit_country
- visit_browser
TABLE 'pageview'
----------------
- id
- visit_id (relates to visit.id)
- page_url
Каждый день я хочу вставлять массив PHP с примерно 100 000 посещений и 400 000 посещений этих таблиц. Чтобы ускорить этот процесс, можно
- добавить несколько вставок в один запрос
- и обернуть всю транзакцию в транзакцию.
Однако моя проблема заключается в том, что для вставки просмотра страницы требуется идентификатор последней вставки родительского посещения. В транзакции, где, скажем, 1000 посещений вставляются с использованием одного запроса, я больше не могу использовать метод lastInsertId () PDO.
В идеале я сохраняю все в одной транзакции. Менее идеальным решением было бы вставить все посещения и добавить столбец ссылок, затем выполнить, проверить, какой идентификатор был получен при каждом посещении, а затем использовать новую транзакцию для вставки хитов. Но это далеко от идеала.
Каков был бы подход к этому? Как ORM, как Doctrine, решает эту проблему (мне нужно положиться на raw SQL через PDO здесь)?