如何在 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 循环中创建嵌套列表?的主要内容,如果未能解决你的问题,请参考以下文章

如何创建一个持续检测列表中抓取的数据是不是更改的while循环

如何在python中动态生成嵌套for循环[重复]

Python打破嵌套的for循环并重新启动while循环

如何退出两个嵌套循环? [复制]

python_嵌套列表变成普通列表

python_嵌套列表变成普通列表