如何合并两个 MySQL 结果?

Posted

技术标签:

【中文标题】如何合并两个 MySQL 结果?【英文标题】:How to merge two MySQL results? 【发布时间】:2010-11-23 03:48:58 【问题描述】:

我在具有相同表结构的 2 台不同服务器上执行 2 次查询。 如何在 php 中合并 2 个数组?

【问题讨论】:

【参考方案1】:

PDO::query() 返回一个实现Traversable 接口的PDOStatement 对象。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";

【讨论】:

有谁知道如何使这个附加迭代器可搜索? (即可以跳转到此 AppendIterator 中的特定位置以获取数据的子集?【参考方案2】:

看看array_merge。

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

将一个或多个数组的元素合并在一起,使值 一个附加到前一个的末尾。它返回 结果数组。

如果输入数组有相同的字符串键,那么后面的值 因为该键将覆盖前一个键。但是,如果数组 包含数字键,后面的值不会覆盖原来的 值,但会被附加。

输入数组中带有数字键的值将重新编号为 在结果数组中从零开始递增键。

【讨论】:

【参考方案3】:

请记住,当您查询两个数据库服务器时,除非您对每个记录标识使用 UUID,否则记录的 id 之间会发生冲突(db auto_increment 功能)。

因此,当您不使用 uuid 生成记录的 ids 时,当您将两个数组与结果合并时,您应该标记 wchich 一个来自服务器以避免以后发生冲突。

【讨论】:

以上是关于如何合并两个 MySQL 结果?的主要内容,如果未能解决你的问题,请参考以下文章

如何合并两个select mysql查询的结果[重复]

mysql如何合并两条记录,或者将查询出来的结果相连

mysql合并结果集

尝试合并 SQL 查询的两个结果 - ToDoList App

MySQL进阶4

mysql多表查询合并到一个临时表,怎么再加一列并把各自的表名加上?