【问题标题】:Looping mulitple SQL queries in multiple arrays在多个数组中循环多个 SQL 查询
【发布时间】:2018-07-16 16:03:39
【问题描述】:

我是 PHP 初学者。我以前涉足过,但是当我开始掌握诀窍时,一个新项目会把我带到别处。如果有人可以提供帮助;我会很感激的。

我正在使用多个查询和数组从 1 个初始已知变体开始检索两个 mySQL 表之间的数据。

我希望每个查询都处理上一个查询的所有结果。这没有发生。

当前结果:第一个查询回显所有结果。第二个查询回显一个结果。第三个查询回显 1 个结果。最终回显显示所有最终结果(需要,但缺少前 148 行)。

所需结果:回显来自所有三个查询的所有 149 个结果,然后回显所有 3 个查询的表/数组(以确认相关性)。

<?php
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 
//Select all POST_IDs for variation 2.1M
$sql = "SELECT post_id FROM wp_postmeta WHERE meta_value = '2-1m'";
$result = $conn->query($sql);
//Array and display POST_IDs
if ($result->num_rows > 0) {
    // output data of each row
    while($row = $result->fetch_assoc()) {
        echo "id: " . $row["post_id"]. "<br>";
}
} else {
    echo "0 results";
}
//Prepare POST_IDs for next query
foreach ($result as $row){
$postids = $row["post_id"];
    }
        //Use POST_IDs to select all PARENT_IDs
    $sql2 = "SELECT post_parent FROM wp_posts WHERE ID = ($postids)";
$result2 = $conn->query($sql2);
//Array and display PARENT_IDs
if ($result2->num_rows > 0) {
    // output data of each row
    while($row2 = $result2->fetch_assoc()) {
        echo "parentid: " . $row2["post_parent"]. "<br>";
    }
} else {
    echo "0 results";
}
//Prepare PARENT_IDs for next query
foreach ($result2 as $row2){
$parentids = $row2["post_parent"];
}
//Select PRICES using PARENT_IDs and META_KEY for Price
$sql3 = "SELECT meta_value FROM wp_postmeta WHERE meta_key = '_price' AND post_id = ($parentids)";
$result3 = $conn->query($sql3);
if ($result3->num_rows > 0) {
    // output data of each row
    while($row3 = $result3->fetch_assoc()) {
        echo "price: " . $row3["meta_value"]. "<br>";
    }
} else {
    echo "0 results";
}
//Array and display PRICES
foreach ($result3 as $row3){
$prices = $row3["meta_value"];
}
//Display all retrieved data
echo "<div><p>" . $postids . " " . $parentids . " " . $prices . "</p></div>";
$conn->close();
?>

【问题讨论】:

  • 当然这一切都可以在SQL中使用JOIN通过一个查询和一个循环来完成,但是不会有连续的打印输出而是更平坦的echo行。
  • 真的吗?一个人将如何构建它?结果是否可以用于更新另一个表(这个例程的下一个目标是什么?)
  • 不确定下一步是什么,但 MySQL 允许在更新查询中使用 JOIN

标签: php mysql sql arrays


【解决方案1】:

您正在覆盖您的变量,而不是将它们累积到一个数组中:

foreach ($result as $row){
    $postids = $row["post_id"];
}

应该是:

$postids = [];
foreach ($result as $row){
    $postids[] = $row["post_id"];
}

然后:

"WHERE ID = ($postids)"

应该是:

if (!empty($postids)) {
 ... "...WHERE ID IN (".implode(',', $postids).")..." ...
}

注意:你应该看看参数化查询:Parameterized Queries PHP/MySQL

$parentids 也发生了同样的事情。

【讨论】:

  • 谢谢。这太棒了。
猜你喜欢
  • 1970-01-01
  • 2016-10-16
  • 1970-01-01
  • 1970-01-01
  • 2014-09-29
  • 1970-01-01
  • 2019-01-23
  • 1970-01-01
  • 2017-10-21
相关资源
最近更新 更多