簡體   English   中英

如何整潔地制作帶有標題和子標題的列表?

[英]How to cleanly do a list with headings and sub-headings?

我正在嘗試使用數據庫列出帶有標題的列表。 例如,我希望列表看起來像這樣:

Programming
- Learn PHP
   - Make a blog using PHP
- Learn Swift - Learn Ruby

如您所見,有一個主標題, Programming ,然后是列表內容本身。 我希望能夠進行嵌套列表,如Learn PHP部分以及通常的列表所示。 抱歉,這令人困惑。

我的PHP代碼在這里有效:

<?php

$db = new mysqli('localhost', 'root', '', 'joshuapriestley');

$data = $db->query("SELECT * FROM goals");

while($row = $data->fetch_assoc()) {
    if($row["parent_id"] == 0) {
        echo "<ul>";
        echo "<li id=\"list-title\">" . $row["message"] . "</li>";

        $sub = $db->query("SELECT * FROM goals WHERE parent_id = " . $row["id"] . " AND sub_parent_id = 0");
        while($sub_row = $sub->fetch_assoc()) {
            echo "<li>" . $sub_row["message"];

            $sub2 = $db->query("SELECT * FROM goals WHERE sub_parent_id = " . $sub_row["id"]);
            if($sub2->num_rows != 0) {
                echo "<ul>";
                while($sub2_row = $sub2->fetch_assoc()) {
                    echo "<li>" . $sub2_row["message"] . "</li>";
                }
                echo "</ul>";
            }

            echo "</li>";
        }
        echo "</ul>";
    }
}               
?>

但對我來說,3個while循環似乎效率很低。 有一個更好的方法嗎? 我有一個數據庫:

數據庫

parent_id用於常規項目, sub_parent_id用於子項目。

這是另一個顯示結果的圖像: 結果

while循環本身並不是問題(在性能方面)。 這是三個查詢。 但是首先要注意的是:

  1. 這是一個嵌套集 類似的問題:數據庫中的樹存儲,菜單導航,分層數據表示。 有很多數據庫布局和算法可以查詢和輸出,更適合提供單查詢解決方案,並且工作得很好。 我強烈建議閱讀嵌套集模型。

  2. 您的數據庫布局包含一個謊言:條目6的父項是5而不是2。或者您的列命名令人困惑。

因此,在第n次嘗試重新發明輪子之前,請使用許多解決方案之一。 搜索引擎的關鍵字:嵌套集(模型)。 每個解決方案都有優點和缺點,如果您感興趣的話,會有一些頁面詳細介紹...

是的,我也被燒死了。 最接近您的解決方案將存儲到節點的整個路徑(包括節點本身!,這在您的解決方案中缺少,id列不足以解決此問題),然后可以遍歷按路徑排序的列表並確定打開位置並通過查看路徑組成部分(通用前綴長度=深度)來關閉<ul/ol> 但是,除了檢索之外,幾乎所有操作都是一件痛苦的事情。

暫無
暫無

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

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