Как объединить два результата MySQL? - PullRequest
4 голосов
/ 27 августа 2009

Я выполняю 2 запроса на 2 разных серверах с одинаковой структурой таблицы. Как я могу объединить 2 массива в PHP?

Ответы [ 3 ]

4 голосов
/ 27 августа 2009

PDO :: query () возвращает объект PDOStatement , который реализует интерфейс Traversable .
SPL класс IteratorIterator переносит любой объект Traversable в режим Iterator .
А другой класс SPL, AppendIterator , может "объединять" итераторы, чтобы они действовали как один итератор.

<?php
$result1 = $pdo1->query('SELECT * FROM foo');
$result2 = $pdo2->query('SELECT * FROM foo');

$it = new AppendIterator;
$it->append(new IteratorIterator($result1));
$it->append(new IteratorIterator($result2));

foreach($it as $row) {
  echo join(', ', $row), "\n";
}
1 голос
/ 27 августа 2009

Взгляните на array_merge .

array array_merge ( array $array1 [, array $... ] )

Объединяет элементы одного или нескольких массивов вместе, чтобы значения из одного добавляются в конец предыдущего. Возвращает результирующий массив.

Если входные массивы имеют одинаковые строковые ключи, то более позднее значение для этого ключа будет перезаписать предыдущий. Если, однако, массивы содержат числовые ключи, более позднее значение не будет перезаписывать оригинал значение, но будет добавлено.

Значения во входном массиве с цифровыми клавишами будут перенумерованы с инкрементные ключи, начинающиеся с нуля в массиве результатов.

0 голосов
/ 27 августа 2009

Имейте в виду, что при запросе двух серверов баз данных у вас будет коллизия между идентификаторами записей (функция db auto_increment), если вы не используете UUID для каждой идентификации записи.

Поэтому, когда вы не используете uuid для генерации идентификаторов записей, когда вы объединяете два массива с результатами, вы должны пометить, какой из них с сервера, чтобы избежать конфликтов позже.

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