sql >> Databasteknik >  >> RDS >> Mysql

Bygga ett träd med kapslade oordnade listor

Hmm, jag tror att det måste finnas exempel tillgängliga online på hur du kan åstadkomma detta. Vissa av dem kanske till och med pratar om nya sätt att lagra hierarkisk data och du kommer att tycka att läsningarna är intressanta.

Hur som helst, det här kodavsnittet, baserat på rekursion, kan hjälpa dig att uppnå din HTML.

<?php
// recursive function to generate the category HTML
function generateTree ($parent) {
    global $arrPCat, $arrCat;
    if (array_key_exists($parent, $arrPCat)) {
        echo '<ul' . ($parent == 0 ? ' class="tree"' : '') . '>';
        foreach ($arrPCat[$parent] as $arrC) {
            echo '<li>' . $arrC['name'] . '</li>';
            generateTree($arrC['id']);
        }
        echo '</ul>';
    }
}

// read all categories from the DB
$rs = mysql_query('SELECT  `cl`.`id`, `cl`.`name`, `c`.`position`, IFNULL(`c`.`parent_id`, 0) AS `parent_id`
    FROM  `categories_locale`  `cl`
    LEFT JOIN  `categories`  `c` ON  `cl`.`id` =  `c`.`id`
    ORDER BY  `c`.`parent_id` ,  `c`.`position`');
while ($r = mysql_fetch_assoc($rs)) {
    // store parent and its children into the $arrPCat Array
    $arrPCat[$r['parent_id']][] = Array (
                                    'id' => $r['id'],
                                    'name' => $r['name']
                                  );
}
generateTree (0); // now generate the HTML for the category tree
?>

Hoppas det hjälper!



  1. MySQL ORDER BY DESC är snabb men ASC är väldigt långsam

  2. Sammanfoga JSONB-värden i PostgreSQL?

  3. Kan jag få resultaten av en lagrad procedur till en markör inom en annan lagrad procedur i SQL

  4. MySQL Joins:att välja vilken tabell som ska anslutas från baserat på källtabellsdata