簡體   English   中英

使用 2 while 語句顯示類別和子類別

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM