我在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}]
那么请如何将这些结果合并到对象数组的一个结果中?
答案 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);