Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie erstelle ich ein verschachteltes Menü aus MySQL mit PHP?

Dies ist speziell für zwei Ebenen tief. Der empfohlene Ansatz, sollte es mehr sein, ist die Verwendung einer optimierten Tabellenstruktur für die Traversierung, wie http://articles.sitepoint.com/article/hierarchical-data-database/2 (an anderer Stelle wird darauf hingewiesen) oder um die benötigten Daten zu ziehen und in ein Wörterbuch (assoziatives Array) zu schieben und auf diese Weise abzufragen.

<?php
    $query = <<<EOT
        SELECT
            parent.name as parent_name,
            child.name as child_name,
        FROM
            items child
        INNER JOIN
            items parent
        ON
            child.parent_id = parent.id
        ORDER BY
            parent.name
EOT;

    $result = mysql_query($query) or die('Failure!');

    echo "<ul id=\"catmenu\">";

    $last_parent = '';
    while($row = mysql_fetch_array($result)){
        // If this is a new category, start a new one
        if($last_parent != $row['parent_name']){
            // Unless this is the first item, close the last category
            if($last_parent != ''){
                echo "</ul></li>";
            }
            $last_parent = $row['parent_name'];
            echo "<li class=\"menulist\">{$row['parent_name']}<ul>";
        }
        echo "<li>{$row['child_name']}</li>";
    }

    // If we actually had items, close the "category"
    if($last_parent != ''){
        echo "</ul></li>";
    }

    echo "</ul>";

?>