Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

PHP / MySQL - xây dựng hệ thống phân cấp menu điều hướng

Dữ liệu phân cấp hơi khó chịu trong cơ sở dữ liệu quan hệ (ngoại trừ Oracle, có các toán tử trong START WITH/CONNECT BY để đối phó với điều này). Về cơ bản có hai mô hình :danh sách kề và các tập hợp lồng nhau.

Bạn đã chọn các bộ gần kề, đó là điều tôi thường làm. Nó dễ thay đổi hơn nhiều so với mô hình tập hợp lồng nhau, mặc dù mô hình tập hợp lồng nhau có thể được truy xuất theo đúng thứ tự trong một truy vấn duy nhất. Danh sách gần kề không được. Bạn sẽ cần phải xây dựng một cấu trúc dữ liệu trung gian (cây) và sau đó chuyển nó thành một danh sách.

Những gì tôi sẽ làm (và trên thực tế đã làm gần đây) là:

  • chọn toàn bộ nội dung menu trong một truy vấn được sắp xếp theo ID gốc;
  • Xây dựng cây cấu trúc menu bằng cách sử dụng mảng hoặc lớp / đối tượng liên kết;
  • Đi bộ trên cây đó để tạo các danh sách không có thứ tự lồng nhau; và
  • Sử dụng trình cắm jQuery như Superfish để biến danh sách đó thành một menu.

Bạn xây dựng một cái gì đó như thế này:

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

và chuyển nó thành sau:

<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 để tạo mảng menu từ khá đơn giản nhưng hơi khó giải quyết. Bạn sử dụng một hàm đi bộ trên cây đệ quy để xây dựng đánh dấu danh sách lồng nhau HTML nhưng sẽ để việc triển khai nó như một bài tập cho người đọc. :)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để lưu trữ vị trí của một hình ảnh trong cơ sở dữ liệu?

  2. Hàm EXP () MySQL - Trả lại e Đã tăng lên sức mạnh của x

  3. Làm thế nào để điền ngày còn thiếu trong MySQL?

  4. Tính tổng kích thước dữ liệu của cột BLOB trong bảng

  5. Không thể kết nối với Nhóm kết nối JDBC từ Glassfish