首页 > 解决方案 > 如何使用array_merge在php中合并两个不同的mysql选择结果?

问题描述

我在 php mysql 中有两个不同的 SELECT 查询。

我想将这两个结果组合成一个对象数组。我不想使用 SQL UNION,因为在合并之前需要对结果进行一些工作。

有 php array_merge() 函数,但是当我尝试使用它时,出现以下错误:

array_merge():参数 #1 不是数组

参数是 SQL 选择查询的结果。

$result1 = "";
$result2 = "";
$merged_results = "";

$stmt = $db->prepare("SELECT col1, col2 col3 from table1");
$stmt->execute();
$result1 = $stmt->get_result();

$stmt = $db->prepare("SELECT col1, col2 col3 from table2");
$stmt->execute();
$result2 = $stmt->get_result(); 

$merged_results = array_merge($result1,$result2);

我的目标是一个对象数组,其中每个对象都代表 mysql select 中的一个数据集,如下所示:

[{name:"Jonny",age:23},{name:"Bonny",age:25},{name:"Flower",age:21}]

那么请如何将这些结果合并为对象数组的一个结果?

标签: phpmysql

解决方案


我实际上建议您直接在 MySQL 上运行联合查询:

SELECT col1, col2 col3 FROM table1
UNION ALL
SELECT col1, col2 col3 FROM table2;

这将避免 PHP 和 MySQL 之间的额外往返。

$sql = "SELECT col1, col2 col3 FROM table1 UNION ALL ";
$sql .= "SELECT col1, col2 col3 FROM table2";

$stmt = $db->prepare($sql);
$stmt->execute();
$resultset = $stmt->get_result();

如果您还想跟踪每条记录的来源,也可以在 MySQL 上使用计算列来处理:

SELECT col1, col2 col3, 'table1' AS source FROM table1
UNION ALL
SELECT col1, col2 col3, 'table2' FROM table2;

推荐阅读