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

Truy xuất dữ liệu với cấu trúc phân cấp trong MySQL

MySQL thiếu các truy vấn đệ quy, là một phần của SQL tiêu chuẩn. Nhiều thương hiệu cơ sở dữ liệu khác hỗ trợ tính năng này, bao gồm PostgreSQL (xem http://www.postgresql.org/docs/8.4/static/queries-with.html ).

Có một số kỹ thuật để xử lý dữ liệu phân cấp trong MySQL.

  • Đơn giản nhất là thêm một cột để ghi chú thứ bậc của một bức ảnh nhất định. Sau đó, bạn có thể tìm kiếm những bức ảnh thuộc cùng một hệ thống phân cấp, tìm nạp tất cả chúng trở lại ứng dụng của bạn và tìm ra những bức ảnh bạn cần ở đó. Điều này hơi lãng phí về băng thông, đòi hỏi bạn phải viết nhiều mã ứng dụng hơn và sẽ không tốt nếu cây của bạn có nhiều nút.

Ngoài ra còn có một số kỹ thuật thông minh để lưu trữ dữ liệu phân cấp để bạn có thể truy vấn chúng:

  • Liệt kê đường dẫn lưu trữ danh sách các tổ tiên với mỗi nút. Ví dụ:ảnh 5 trong ví dụ của bạn sẽ lưu trữ "0-2-4-5". Bạn có thể tìm kiếm tổ tiên bằng cách tìm kiếm các nút có đường dẫn được nối với "%" phù hợp với đường dẫn của 5 với LIKE vị ngữ.

  • Bộ lồng nhau là một kỹ thuật phức tạp nhưng thông minh được Joe Celko phổ biến trong các bài báo và cuốn sách "Trees and Hierarchical in SQL for Smarties". Có rất nhiều blog và bài báo trực tuyến về nó. Thật dễ dàng để truy vấn cây, nhưng khó truy vấn con cái hoặc cha mẹ ngay lập tức và khó chèn hoặc xóa các nút.

  • Bảng kết thúc liên quan đến việc lưu trữ mọi mối quan hệ tổ tiên / hậu duệ trong một bảng riêng biệt. Thật dễ dàng để truy vấn cây, dễ chèn và xóa và dễ dàng truy vấn cha mẹ hoặc con cái ngay lập tức nếu bạn thêm độ dài đường dẫn cột.

Bạn có thể xem thêm thông tin so sánh các phương pháp này trong bản trình bày của tôi Đối tượng thực tế -Mô hình Hướng dẫn trong SQL hoặc cuốn sách sắp ra mắt của tôi Phản văn bản SQL:Tránh cạm bẫy của lập trình cơ sở dữ liệu .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Phương pháp tốt nhất để lưu trữ danh sách ID người dùng

  2. Sử dụng Cơ sở dữ liệu quan hệ MySQL trên Ubuntu 8.04 (Hardy)

  3. truy vấn mysql để chọn tất cả ngoại trừ một số thứ

  4. Truy vấn toàn văn với một trích dẫn duy nhất

  5. Làm cách nào để chọn các hàng có dấu thời gian của ngày hiện tại?