如何合并两个 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 结果?的主要内容,如果未能解决你的问题,请参考以下文章