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

Làm cách nào để tìm nạp các danh mục và danh mục con trong một truy vấn duy nhất trong sql? (mysql)

Nếu bạn hỏi về "Có trong truy vấn đệ quy mysql không?" trả lời "KHÔNG".

Nhưng có một cách tiếp cận rất tốt để xử lý nó.

Tạo bảng trợ giúp (nói CatHierarchy)

CatHierarchy:
    SuperId, ChildId, Distance
------------------------------ 
     1          1         0
     1          2         1
     2          2         0

Dữ liệu dư thừa này cho phép dễ dàng trong 1 truy vấn để chọn bất kỳ phân cấp nào và trong 2 chèn hỗ trợ bất kỳ phân cấp nào (xóa cũng được thực hiện trong 1 truy vấn với sự trợ giúp của xóa toàn vẹn tầng).

Vì vậy, điều này có nghĩa là gì. Bạn theo dõi tất cả các đường dẫn trong hệ thống phân cấp. Mỗi nút của Cat phải thêm tham chiếu vào chính nó (khoảng cách 0), sau đó hỗ trợ sao chép bằng cách thêm dữ liệu dư thừa về các nút được liên kết.

Để chọn danh mục có phụ chỉ cần viết:

 SELECT c.* from Category c inner join CatHierarchy ch ON ch.ChildId=c.cat_id
      WHERE ch.SuperId = :someSpecifiedRootOfCat

someSpecifiedRootOfCat - là tham số để chỉ định gốc của categoryTHATS ALL!



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. GROUP_CONCAT tương đương ở Django

  2. Lỗi SQL:1064, SQLState:42000 khi tạo thực thể mới

  3. Hiệu suất UDF trong MySQL

  4. Thực hiện theo thiết kế bảng cơ sở dữ liệu người dùng

  5. Làm thế nào để sử dụng các mô hình django có khóa ngoại trong các DB khác nhau?