簡體   English   中英

兩級數據上的 PHP MySQL 循環

[英]PHP MySQL Loop on two-level data

我正在嘗試使用單個 mysql 查詢從 mysql 數據庫中提取兩層數據,然后使用 php while 循環按頂層分組顯示它。

<?php $org = "1";

$row1 = mysqli_prepare($db,"SELECT * FROM menu WHERE org = ? ORDER BY mid DESC"); 
$row1->bind_param("s", $org);
mysqli_stmt_execute($row1); $row2 = mysqli_stmt_get_result($row1);

while($row = mysqli_fetch_array($row2)){ ?>

<div class="category"><?php echo $row["item"]; /* GROUPED*/?>
<div class="item"><?php echo $row["item"]; /* INDIVIDUAL ITEM*/?></div>
</div>

<?php }; ?>
父母 組織 物品 價格
1 1 類別 1
2 1 1 第 1 項 10 美元
3 1 1 第 2 項 12 美元
4 1 類別 2
5 4 1 第 3 項 12 美元
6 4 1 第 4 項 90 美元

數據結構

顯然,每個項目只會出現一次,但類別將與基礎項目出現的次數一樣多。 但是,在代碼中,我需要將所有項目分組到同一父類別下。 有任何想法嗎?

想要的結果

列表
類別 1
- 第 1 項
- 第 2 項
類別 2
- 第 3 項
- 第 4 項

或者就 HTML 代碼輸出而言:

<div class="category">Parent Category 1<br>
<div class="item">Item 1</div>
<div class="item">Item 2</div>
</div>
<div class="category">Parent Category 3<br>
<div class="item">Item 3</div>
<div class="item">Item 4</div>
</div>

應該這樣做;

SELECT          T.*, 
                IF(T.parent IS NULL, T.mid, T.parent) AS ParentGroup
FROM            mytable as T
WHERE           T.org = 1 # Comment out here to get for all org
ORDER BY        T.org ASC, ParentGroup ASC, T.parent IS NULL DESC, T.mid ASC

注意:在您的代碼中使用 SQL 語句之前,請仔細閱讀 SQL 注入策略。

我希望你已經知道如何用 PHP 從 MySQL 中獲取數據; 獲取所有記錄后,您可以像下面這樣循環;

... Here you already fetched all the records from database into $Recordset array

foreach($Recordset as $Data){ // Loop through the record set
    if($Data["parent"]){
        print "<li>{$Data["item"]}</li>"; // Item
    }
    else{
        print "<div class=\"Category\"><h1>{$Data["item"]}</h1><ul class=\"Item\">"; // Category
    }
}

print "</ul></div>";

將流控制添加到您的代碼中

<?php 
$org = "1";

$row1 = mysqli_prepare($mysqli,"SELECT * FROM menu WHERE org = ? ORDER BY mid ASC"); 
$row1->bind_param("s", $org);
mysqli_stmt_execute($row1); 
$row2 = mysqli_stmt_get_result($row1);
$controlfirst = 0;
while(  $row = mysqli_fetch_array($row2)) {
    if ( !isset($row["parent"])) { 
        if ( $controlfirst == 1) {  ?>          
        </div> 
    <?php } ?>
        <div class="category"><?php echo $row["item"]; /* GROUPED*/ 
     $controlfirst = 1;
    }
    else { 
            ?>
            
            <div class="item"><?php echo $row["item"];?> </div>/* INDIVIDUAL ITEM*/
    <?php  }
 }      
if ( $controlfirst == 1) {  ?>      


    </div> 
<?php } ?>

查看示例

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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