如何在 while 循环中创建嵌套列表?
Posted
技术标签:
【中文标题】如何在 while 循环中创建嵌套列表?【英文标题】:How do I create a nested list inside of a while loop? 【发布时间】:2013-05-21 05:50:59 【问题描述】:我在尝试在 while 循环中获取嵌套
时遇到问题。我不确定这是否可能,所以我愿意接受替代方案。Here's a quick image of what my database looks like and what i'm trying to achieve.
这是我的 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。提前致谢!
【问题讨论】:
你真的需要查找表(category_id 可以很容易地存储在饮料表中)吗?我个人会通过 2 个查询来解决这个问题,一个针对类别,一个针对饮料本身(我不知道这种情况下的最佳做法) 一种饮料可以有多个类别吗?如果不能,则不需要联结表(将饮料链接到类别的表)。 有些饮料确实属于多个类别。感谢您的建议! 【参考方案1】:将您的 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>";
【讨论】:
The bottom of this image has the output I was hoping to get.【参考方案2】:$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>";
【讨论】:
【参考方案3】:您可以将 category_id 添加到您的饮料表中,而不是 3 个表,以简化操作。然后你可以这样做:
SELECT drink_name, (SELECT drnk_category_title FROM drinks_category WHERE drink_category_id = drink_category // THE COLUMN I SUGGESTED //) AS title FROM drinks
然后您可以循环结果并非常轻松地构建您想要的节点
【讨论】:
以上是关于如何在 while 循环中创建嵌套列表?的主要内容,如果未能解决你的问题,请参考以下文章