У меня возникли проблемы с попыткой получить вложенную <ul> внутри цикла while. Я не уверен, что это возможно, поэтому я открыт для альтернатив.
Вот краткое изображение того, как выглядит моя база данных и чего я пытаюсь достичь.
Вот мой sql
SELECT * FROM drinks_category, drinks_lookup, drinks WHERE drinks.drink_id = drinks_lookup.drink_id AND drinks_lookup.drinks_category_id = drinks_category.drinks_category_id ORDER BY drinks_category.drinks_category_title
Вот мой вывод php
$result = $conn->query($sql) or die(mysqli_error()); $last_category = 0; while ($row = $result->fetch_assoc()) { if($row['drinks_category_id'] != $last_category) { echo "<h1>" . $row['drinks_category_title'] . "</h1>"; } echo "<p>" . $row['drink_name'] . "</p>"; $last_category = $row['drinks_category_id']; }
Я использую mysqli и php. Заранее спасибо!
Обновите цикл while следующим образом:
while ($row = $result->fetch_assoc()) { if($row['drinks_category_id'] != $last_category) { if($last_category != 0) echo '</ul>'; echo "<h1>" . $row['drinks_category_title'] . "</h1>"; echo "<ul>"; } echo "<li>" . $row['drink_name'] . "</li>"; $last_category = $row['drinks_category_id']; } if($last_category != 0) echo "</ul>";
Вместо того, чтобы иметь 3 таблицы, вы можете просто добавить category_id в свой стол для напитков, просто для упрощения. Тогда вы можете сделать это:
SELECT drink_name, (SELECT drnk_category_title FROM drinks_category WHERE drink_category_id = drink_category // THE COLUMN I SUGGESTED //) AS title FROM drinks
И тогда вы можете зацикливать результат и быстро создать нужные вам узлы
$result = $conn->query($sql) or die(mysqli_error()); $last_category = 0; while ($row = $result->fetch_assoc()) { if($row['drinks_category_id'] != $last_category) { // close previous </ul> if( $last_category != 0 ) echo "</ul>"; // new title echo "<h1>" . $row['drinks_category_title'] . "</h1>"; // new <ul> echo "<ul>"; $last_category = $row['drinks_category_id']; } echo "<li>" . $row['drink_name'] . "</li>"; } // close last </ul> if( $last_category != 0 ) echo "</ul>";