1
<?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 ,因为这是我在这里读到的大多数相关主题的答案,但这似乎不是我想要的,因为我在第一时间回显并声明变量用于第二个查询。

使用的表:

'结果' id | opdrachtid | 姓名

'opdrachten' 标识 | 姓名

同样,resultaten.opdrachtid == opdrachten.id

在此先感谢,感谢您的帮助:)

4

2 回答 2

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

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

于 2013-03-21T23:51:40.403 回答
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 *查询。它是懒惰的,浪费带宽、传输时间和系统内存。只查询您真正感兴趣的特定字段。因此,将*我的示例中的 替换为您需要的实际字段。
于 2013-03-21T23:59:56.633 回答