如何使用array_merge在php中合并两个不同的mysql select结果?

时间:2019-02-12 15:26:11

标签: 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}]

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

3 个答案:

答案 0 :(得分:1)

我实际上建议您直接在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;

答案 1 :(得分:1)

您没有占位符,也没有绑定任何变量,所以我不知道您为什么使用bind_param。另外,您将需要将行提取到未做的数组中:

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

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

$merged_results = array_merge($rows1, $rows2);

还有其他方法可以解决此问题,因为您实际上没有绑定任何变量,但是我使用了您的代码,因为如果您需要绑定变量,可以对其进行扩展。

答案 2 :(得分:0)

get_result()是mysqli结果对象,而不是您返回的数据。 http://php.net/manual/en/mysqli-stmt.get-result.php

您需要执行以下操作。

$merged_results = [];

$query = 'SELECT col1, col2 col3 from table1';
$stmt = $mysqli->stmt_init();
$stmt->prepare($query);
$stmt->execute();
$result = $stmt->get_result();
while ($row = $result->fetch_array(MYSQLI_ASSOC))
{
    $merged_results[] = $row;
}

$query = 'SELECT col1, col2 col3 from table2';
$stmt = $mysqli->stmt_init();
$stmt->prepare($query);
$stmt->execute();
$result = $stmt->get_result();
while ($row = $result->fetch_array(MYSQLI_ASSOC))
{
    $merged_results[] = $row;
}

var_dump($merged_results);

或者您可以通过联合查询在一个查询中完成

$stmt = $db->prepare("SELECT col1, col2 col3 from table1 UNION SELECT col1, col2 col3 from table2");
$stmt->bind_param("sss",c1,c2,c3);
$stmt->execute();
$result2 = $stmt->get_result(); 

while ($row = $result->fetch_array(MYSQLI_ASSOC))
{
    $merged_results[] = $row;
}

var_dump($merged_results);