Пакет MYSQL Вставки с родительскими отношениями в транзакции - PullRequest
0 голосов
/ 11 марта 2020

Рассматривая две таблицы (я немного упростил это, в действительности есть больше связанных таблиц и больше столбцов):

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 здесь)?

1 Ответ

0 голосов
/ 11 марта 2020

вы можете сделать запрос примерно таким

$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)";

, чем подготовить, связать и выполнить

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...