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

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

【问题讨论】:

    标签: php mysql merge


    【解决方案1】:

    PDO::query() 返回一个实现Traversable 接口的PDOStatement 对象。
    SPLIteratorIterator 包装任何 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 一个来自服务器以避免以后发生冲突。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-06-28
        • 1970-01-01
        • 2021-11-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多