Mysql
 sql >> база данни >  >> RDS >> Mysql

Многостепенно меню от записи в базата данни

Кодът за това би бил нещо като следното (Това ще трябва да се промени за какъвто и начин да взаимодействате с базата данни и т.н.):

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

Опитайте се да разберете какво правя тук, вместо просто да го прилагате дословно. След като се запознаете с рекурсивните функции, пред вас може да се отвори цял нов свят.

Също така имайте предвид, че вашата db таблица може да бъде променена, за да направи този код по-опростен



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Къде да използвате mysql_real_escape_string за предотвратяване на SQL инжектиране?

  2. Как правилно да боравите с международния знак в PHP / MySQL / Apache

  3. MySQL SELECT DISTINCT множество колони

  4. GROUP BY времево клеймо на всеки 15 минути, включително липсващи записи

  5. Как да накарам CakePHP bake, за да намеря mysql.sock и да разпозная MySQL, докато използвам MAMP на Mac OSX?