sql >> Database teknologi >  >> RDS >> Mysql

Menu på flere niveauer fra databaseposter

Koden til dette ville være noget i stil med følgende (Dette skal ændres uanset hvilken måde du interagerer med databasen osv.):

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

Prøv at forstå, hvad jeg laver her i stedet for blot at implementere det ordret. Når du først lærer rekursive funktioner at kende, kan en helt ny verden åbne sig for dig.

Bemærk også, at din db-tabel kan ændres for at gøre denne kode enklere



  1. Prioriter en kolonne frem for en anden

  2. Hvordan holder jeg værdierne af en kolonne unikke i MySQL?

  3. Sådan opdateres flere kolonner i MySQL

  4. PostgreSQL:standard begrænsningsnavne