【问题标题】:MySQL while loop query inside other while loop queryMySQL while 循环查询在其他 while 循环查询中
【发布时间】:2013-03-11 17:07:07
【问题描述】:
<?php

include 'config.php';

$conn = mysql_connect("$hostname", "$username", "$password") or die ("Failed to connect to DB.");

mysql_select_db("$dbname",$conn);

    $sql="SELECT * FROM opdrachten";
    $result=mysql_query($sql,$conn);

while ($row= mysql_fetch_array($result))
{
    echo $row['name'];
    echo "<br>";
    $opdrachtid = $row["id"];

    $sql2="SELECT * FROM resultaten WHERE(opdrachtid='".$opdrachtid."')";
    $result2=mysql_query($sql2,$conn);

    while ($row2= mysql_fetch_array($result2))
    {
        echo "
                    <li>
                        <a href=\"result.php?id=".$row2["id"]."\">
                            <img src=\"".$row2["img"]." \"width=\"150\" height=\"150\">
                            <div><span>TEXT HERE</span></div>
                        </a>
                    </li>";
    }


}           
?>

我希望我的代码做的是(在一个循环中):

  1. 从表“opdrachten”中获取所有行并回显它们的“名称”。
  2. 从“opdrachten”中的每一行中获取“id”> 存储在变量 $opdrachtid 中
  3. 从表“resultaten”中获取行,其中“opdrachtid == $opdrachtid”(我刚刚存储)
  4. 从从 3 获取的行中回显“id”和“img”。

我想在我的页面上看到的内容:

  1. “opdrachten”表中“opdrachten”(目标)的名称 正下方
  2. 分配给这些目标的图像(其 url 存储在表 'resultaten' 中) (WHERE opdrachten.id = resultaten.opdrachtid)

我已经研究了 JOIN,因为这是我在这里读到的大多数相关主题的答案,但这似乎不是我正在寻找的,因为我在第一时间回声并声明用于第二个查询的变量。

使用的表格:

'结果' 编号 | opdrachtid |名字

'opdrachten' 编号 |名字

同样,resultaten.opdrachtid == opdrachten.id

提前感谢,感谢帮助:)

【问题讨论】:

  • 由于 mysql 库已被弃用,建议使用 mysqli 或 pdo。
  • 你不需要 2 次查询在第一个查询中加入,然后一个循环就可以工作

标签: php mysql while-loop


【解决方案1】:
SELECT opdrachten.*, resultaten.* FROM opdrachten
INNER JOIN resultaten
ON resultaten.opdrachtid = opdrachten.id;

只需将其用作原始 sql 语句并对其进行迭代。

【讨论】:

    【解决方案2】:

    我当然建议在这里使用 JOIN,这样您就可以一次性获取所有这些数据。但是,我要添加一个警告 - 这会像您目前正在做的那样在循环中查询数据库需要更多内存,因此如果您在任一表中都有大量行,这可能不是一个合适的方法。

    查询将是:

    SELECT * FROM opdrachen
    INNER JOIN resultaten ON opdrachen.id = resultaten.opdrachenid
    

    然后您可以像这样非常简单地设置一个以每个 id 为键的数组:

    $array = array();
    while ($row = mysql_fetch_array($result)) {
        $array[$row['id']][] = $row;
    }
    

    这为您提供了一种迭代结果的简单方法,一次一个 id,如下所示:

    foreach ($array as $id => $rows_for_id) {
          // output stuff for row group
          foreach ($rows_for_id as $resultaten_row) {
              // output stuff for resultaten rows
          }
    }
    

    其他一些建议:

    • 不要使用 mysql_* 函数,因为它们已被弃用。了解如何使用 mysqli 或 PDO。
    • 不要使用SELECT * 查询。它是懒惰的,浪费带宽、传输时间和系统内存。仅查询您真正感兴趣的特定字段。因此,将我示例中的 * 替换为您需要的实际字段。

    【讨论】:

    • 谢谢!这似乎确实有效。但试图执行 'echo $rows_for_id['name'];'在 //output stuff for row group 部分中似乎没有给出任何结果。 ['id'] 也没有(这绝对应该有效,对吧?)
    猜你喜欢
    • 1970-01-01
    • 2013-01-15
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 2013-03-19
    • 1970-01-01
    • 2013-07-01
    • 1970-01-01
    相关资源
    最近更新 更多