<?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 | Оффшоры | имя
'opdrachten' id | имя
Снова, resultaten.opdrachtid == opdrachten.id
Спасибо заранее, оцените помощь 🙂
Я бы, конечно, предложил использовать JOIN здесь таким образом, чтобы вы могли получить все эти данные за один раз. Однако я добавлю одно предостережение – для этого потребуется больше памяти, которая запрашивает базу данных в цикле, как вы сейчас делаете, поэтому, если у вас есть большое количество строк в любой таблице, это может быть не подходящий подход.
Запрос будет просто:
SELECT * FROM opdrachen INNER JOIN resultaten ON opdrachen.id = resultaten.opdrachenid
Затем вы можете настроить массив, который вводится в каждый идентификатор очень просто:
$array = array(); while ($row = mysql_fetch_array($result)) { $array[$row['id']][] = $row; }
Это дает вам простой способ повторить результаты, по одному идентификатору в одно и то же время:
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 *
. Его ленивая и потерянная полоса пропускания, время передачи и системная память. Только запрос для конкретных полей, на которые вы действительно заинтересованы. Поэтому замените *
в моем примере фактическим полем, в котором вы нуждаетесь. SELECT opdrachten.*, resultaten.* FROM opdrachten INNER JOIN resultaten ON resultaten.opdrachtid = opdrachten.id;
просто используйте это как исходный оператор sql и перебирайте его.