sql >> Databasteknik >  >> RDS >> Mysql

Flernivåmeny från databasposter

Koden för detta skulle vara ungefär följande (Detta kommer att behöva ändras oavsett hur du interagerar med databasen etc.):

// 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('');

Försök att förstå vad jag gör här istället för att bara implementera det ordagrant. När du väl lärt känna rekursiva funktioner kan en helt ny värld öppna sig för dig.

Observera också att din db-tabell kan ändras för att göra den här koden enklare



  1. Hur man skickar e-post från MySQL 5.1

  2. Django migration sql för villkorliga utlösare

  3. Rekursionsgränsen har överskridits i icke-rekursiv procedur

  4. Sortera kulor i databasen