sql >> データベース >  >> RDS >> Mysql

カテゴリとサブカテゴリを表示するにはどうすればよいですか?

    以下のコードで始めることができます。これは「再帰関数」であり、それ自体を呼び出す関数です。 @ Fake51が今述べたように、それはあまり効率的ではありませんが、機能するはずです。

    作成したリストを構成するには、CSSが必要です。

    function showItems($parent = 0) {
        $q = "SELECT id, name FROM category WHERE parent_id = $parent";
        $q = mysql_query($q);
        if(mysql_num_rows($q)) {
            echo "<ul>";
            while($r = mysql_fetch_row($q)) {
                echo "<li>";
                echo "<a href=\"page.php?id=".$r[0]."\">".htmlentities($r[1])."</a>";
                showItems($r[0]);
                echo "</li>"\n;
            }
            echo "</ul>\n";
        }
    }
    showItems();
    

    編集:まだ受け入れられた答えがないので、これは、少し混乱する可能性がありますが、はるかに効率的であるはずの単一のSQLクエリですべてを行うように変更された私のコードです。どうなるか見てみましょう。

    //Recursive function to show menu items from a passed in array
    function showItems(&$menu, $parent = 0) {
        if(is_array($menu[$parent]) && sizeof($menu[$parent])) {
            echo "<ul>";
            foreach($menu[$parent] as $num=>$name) {
                echo "<li>";
                echo "<a href=\"page.php?id=".$num."\">".htmlentities($name)."</a>";
                showItems($menu, $num);
                echo "</li>\n";
            }
            echo "</ul>\n";
        }
    }
    
    //Create a multi-dimensional array of ALL menu items, separated by parent
    $menu = array();
    $q = "SELECT id, name, parent_id FROM category ORDER BY order";
    $q = mysql_query($q);
    while($r = mysql_fetch_row($q)) {
        $menu[$r[2]][$r[0]] = $r[1];
    }
    
    //Call the function
    showItems($menu);
    


    1. Excelスプレッドシートの列をSQLServerデータベースにインポートします

    2. ORA-00918:SELECTであいまいに定義された列*

    3. PHP Dockerイメージにpdoドライバーをインストールするにはどうすればよいですか?

    4. PostgreSQL、SQL状態:42601