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

PHP/MySQL - изграждане на йерархия на навигационно меню

Йерархичните данни са донякъде досадни в релационна база данни (с изключение на Oracle, която има оператори в START WITH/CONNECT BY да се справят с това). По принцип има два модела :списък на съседство и вложени набори.

Вие сте избрали набори за съседство, което обикновено правя и аз. Много по-лесно е да се промени от модела на вложен набор, въпреки че моделът на вложен набор може да бъде извлечен в правилния ред в една заявка. Списъците със съседство не могат да бъдат. Ще трябва да изградите междинна структура от данни (дърво) и след това да я преобразувате в списък.

Това, което бих направил (и всъщност го направих наскоро), е:

  • изберете цялото съдържание на менюто в една заявка, подредена по ID на родител;
  • Изградете дърво на структурата на менюто с помощта на асоциативни масиви или класове/обекти;
  • Разходете се по това дърво, за да създадете вложени неподредени списъци; и
  • Използвайте добавка jQuery като Superfish за да превърнете този списък в меню.

Изграждате нещо подобно:

$menu = array(
  array(
    'name' => 'Home',
    'url' => '/home',
  ),
  array(
    'name' => 'Account',
    'url' => '/account',
    'children' => array(
      'name' => 'Profile',
      'url' => '/account/profile',
    ),
  ),
  // etc
);

и го преобразувайте в това:

<ul class="menu">;
  <li><a href="/">Home</a></li>
  <li><a href="/account">Account Services</a>
    <ul>
      <li><a href="/account/profile">Profile</a></li>
...

PHP за генериране на масива от менюта е сравнително лесен, но малко фин за решаване. Използвате рекурсивна функция за обхождане на дърво, която изгражда маркирането на вложен списък в HTML, но ще остави изпълнението си като упражнение за читателя. :)



  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 Connector C++?

  2. Инсталиране на magento, получаване на грешка при връзката с базата данни.

  3. Golang MySQL заявка за недефинирано количество аргументи, използвайки IN оператор

  4. Django автоматично създава първични ключове за съществуващи таблици на база данни

  5. Повторете и получете уникални стойности от JSON за някои индекси