Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

PHP/MySQL - membangun hierarki menu navigasi

Data hierarkis agak mengganggu dalam database relasional (tidak termasuk Oracle, yang memiliki operator di START WITH/CONNECT BY untuk menangani ini). Pada dasarnya ada dua model :daftar adjacency dan kumpulan bersarang.

Anda telah memilih set ketetanggaan, yang biasanya saya lakukan juga. Ini jauh lebih mudah untuk diubah daripada model kumpulan bersarang, meskipun model kumpulan bersarang dapat diambil dalam urutan yang benar dalam satu kueri. Daftar kedekatan tidak boleh. Anda harus membangun struktur data perantara (pohon) dan kemudian mengubahnya menjadi daftar.

Apa yang akan saya lakukan (dan sebenarnya telah saya lakukan baru-baru ini) adalah:

  • pilih seluruh isi menu dalam satu kueri yang diurutkan berdasarkan ID induk;
  • Bangun pohon struktur menu menggunakan array asosiatif atau kelas/objek;
  • Jalani pohon itu untuk membuat daftar tak berurutan bersarang; dan
  • Gunakan plugin jQuery seperti Superfish untuk mengubah daftar itu menjadi menu.

Anda membuat sesuatu seperti ini:

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

dan ubah menjadi ini:

<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 untuk menghasilkan larik menu dari cukup mudah tetapi agak rumit untuk dipecahkan. Anda menggunakan fungsi berjalan pohon rekursif yang membangun markup daftar bersarang HTML tetapi akan membiarkan implementasinya sebagai latihan untuk pembaca. :)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Masukkan Data ke dalam Database MySQL

  2. Primefaces Autocomplete dari database besar tidak bertindak cepat

  3. MySQL Tidak Dikonfigurasi dengan Benar Alasan:penggunaan jalur relatif yang tidak aman

  4. Bagaimana cara menghitung ukuran dari kueri saya MySQL?

  5. Masalah MySQL saat membuat pengguna baru