sql >> Databáze >  >> RDS >> Mysql

Víceúrovňové menu z databázových záznamů

Kód pro toto by byl něco jako následující (toto bude muset být změněno pro jakýkoli způsob interakce s databází atd.):

// Here we do a query to get all the rows from the table
$db_result = db_execute_query('SELECT * FROM `menu_table` ORDER BY `order_no`');

// Here we take the rows and put it into a structured array
$items = array();
$hierarchy = array('' => array());
while ($row = db_fetch_row($db_result)) {
    $items[$row['menu_name']] = $row['menu_name_en'];
    if ($row['main_menu'] == 'yes') {
        $hierarchy[''][] = $row['menu_name'];
    } else {
        if (!isset($hierarchy[$row['sub_menu']]) {
            $hierarchy[$row['sub_menu']] = array();
        }
        $hierarchy[$row['sub_menu']][] = $row['menu_name'];
    }
}

// Here we define a recursive function to run through our $hierarchy array;
function show_menu($name = '') {
    if (isset($hierarchy[$name])) {
        if ($name == '') {
                echo '<ul class="dropdown">';
        } else {
                echo '<ul class="sub_menu">';
        }

        foreach ($hierarchy[$name] as $sub) {
            echo '<li><a href="#">' . $items[$sub] . '</a>';
            show_menu($sub);
            echo '</li>';
        }

        echo '</ul>';
    }
}

// Here we execute the recursive function on the main menu
show_menu('');

Zkuste porozumět tomu, co tady dělám, místo toho, abyste to jen doslovně implementovali. Jakmile se seznámíte s rekurzivními funkcemi, může se vám otevřít zcela nový svět.

Všimněte si také, že vaši db tabulku lze změnit, aby byl tento kód jednodušší



  1. Hibernace uložení uživatelského modelu do Postgresu

  2. Jak získat rozdíl mezi dvěma řádky pro sloupcové pole?

  3. Vytváření nebo simulace dvourozměrných polí v PL/SQL

  4. součet mysql s ID řádků