2013-05-26 51 views
2

我在试图在while循环中嵌套< ul>时遇到了问题。我不确定这是否可能,所以我打开替代品。如何在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 

下面是使用的mysqli和PHP我的输出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']; 

} 

林。提前致谢!

+0

你真的需要查找表(CATEGORY_ID可以很容易地存储在饮料表)?我个人会用2个查询来解决这个问题,一个用于类别,一个用于饮料本身(我不知道这种情况下的最佳做法) – kero

+0

饮料可以有多个类别?如果它不能,那么你不需要连接表(将饮料链接到类别)。 –

+0

一些饮料属于多个类别。感谢您的建议! –

回答

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>"; 
+0

[这张图片的底部有我希望得到的输出。](http://i.imgur.com/75u2cVf.jpg) –

+0

这很好用,谢谢! –

0

而是具有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 

然后可以循环的结果,并建立你的愿望节点真的很容易

0
$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>";