<?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>";
}
}
?>
我想让我的代码做的是(循环中):
我想在我的页面上看到什么:
我已经调查了JOIN,因为这是我在这里阅读的大多数相关主题的答案,但这似乎不是我正在寻找的,因为我在第一次回应时并声明用于第二个查询的变量。
使用的表:
'resultaten' id | opdrachtid |名字
'opdrachten' id |名称
再次,resultaten.opdrachtid == opdrachten.id
提前致谢,感谢您的帮助:)
答案 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
}
}
其他一些建议:
SELECT *
个查询。它是懒惰的,浪费带宽,传输时间和系统内存。只查询您真正感兴趣的特定字段。请将示例中的*
替换为您需要的实际字段。