MySQL while循环查询在其他while循环查询中

时间:2013-03-21 23:46:51

标签: php mysql while-loop

<?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'表中获取所有行并回显他们的'name'。
  2. 从'opdrachten'&gt;中的每一行抓取'id'存储在变量$ opdrachtid
  3. 从表'resultaten'中获取行'opdrachtid == $ opdrachtid'(我刚刚存储)
  4. 从3中提取的行中回复'id'和'img'。
  5. 我想在我的页面上看到什么:

    1. 表'opdrachten'中'opdrachten'(目标)的名称 直接在
    2. 下面
    3. 分配给这些目标的图像(其中的url存储在表'resultaten'中)(WHERE opdrachten.id = resultaten.opdrachtid)
    4. 我已经调查了JOIN,因为这是我在这里阅读的大多数相关主题的答案,但这似乎不是我正在寻找的,因为我在第一次回应时并声明用于第二个查询的变量。

      使用的表:

      'resultaten' id | opdrachtid |名字

      'opdrachten' id |名称

      再次,resultaten.opdrachtid == opdrachten.id

      提前致谢,感谢您的帮助:)

2 个答案:

答案 0 :(得分:1)

SELECT opdrachten.*, resultaten.* FROM opdrachten
INNER JOIN resultaten
ON resultaten.opdrachtid = opdrachten.id;

只需将其用作原始sql语句并迭代它。

答案 1 :(得分:1)

我肯定建议在这里使用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 *个查询。它是懒惰的,浪费带宽,传输时间和系统内存。只查询您真正感兴趣的特定字段。请将示例中的*替换为您需要的实际字段。