[英]Show categories and subcategories with 2 while statement
我有一個 mysql 表,用於在下拉菜單列表中訂購類別和子類別。 我想在while中使用while語句,但我只得到第一個帶有相對子類別的主類別,然后循環在第一條記錄后停止。
我想如何顯示它:
-1 main cat
-1.1 sub-cat
-1.2 sub-cat ...and so on
-2 main cat
- 2.1 sub-cat
- 2.2 sub-cat...and so on
這是簡單的測試頁面:
<!DOCTYPE html>
<html lang="en">
<head>
<title>Test</title>
</head>
<body>
<ul>
<?php
$main_cat = "SELECT *
FROM category
WHERE cat_parent_id = :value
AND cat_lang = 'gb'
ORDER BY cat_id ASC";
$stmt = $con->prepare($main_cat);
$stmt->bindValue(':value', 0, PDO::PARAM_STR);
$stmt->execute();
while ($row_main = $stmt->fetch(PDO::FETCH_ASSOC)){
extract($row_main);
?>
<li><?php echo $cat_name; ?></li>
<li>
<ul>
<?php
$sub_cat = "SELECT *
FROM category
WHERE cat_parent_id = ?
ORDER BY cat_id ASC";
$stmt = $con->prepare($sub_cat);
$stmt->bindParam(1, $cat_id);
$stmt->execute();
while ($row_sub = $stmt->fetch(PDO::FETCH_ASSOC)){
extract($row_sub);
?>
<li><?php echo $cat_name; ?></li>
<?php }
}
?>
</ul>
</li>
</ul>
</body>
</html>
主要問題是,對於第二個嵌套 SQL,您對語句使用相同的變量名......
$stmt = $con->prepare($sub_cat);
作為
$stmt = $con->prepare($main_cat);
因此,當內循環完成讀取所有記錄時,它會 go 到外循環,並且還會看到$stmt
中的所有記錄都已被讀取。
你最好使用類似的東西
$stmtSub = $con->prepare($sub_cat);
並更新第二條語句的所有引用。
您還可以將此准備移動到兩個 while 循環之外,以便它只准備一次,然后每次重新執行。
進行以下更改:
對$stmt2 or $stmt_sub.
等子類別使用不同的$stmt
名稱。
您應該始終為不同的准備好的語句使用不同的變量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.