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

chọn truy vấn cho dữ liệu danh mục có mối quan hệ cha mẹ con

Hãy thử tự tham gia:

CHỈNH SỬA: Tôi quên đặt mệnh đề WHERE

SELECT
    a.name,
    b.name,
    c.name
FROM 
    category as a
LEFT JOIN category as b
    ON b.parent_id = a.id
INNER JOIN category as c
    ON c.parent_id = b.id
    AND c.inherit = 'Y'
WHERE
    a.id = 1

Nhưng giải pháp lý tưởng là có một hàm đệ quy sẽ thực hiện điều này vì trong bảng đó bạn đang mô tả một cây các danh mục. Truy vấn ở trên là tĩnh, nó quay trở lại 2 cấp độ (2 danh mục phụ) và từ những gì tôi hiểu bạn cần một cái gì đó động.

Một cái gì đó giống như chức năng bên dưới:

public String getCategory(int categId){

    String sSql = "SELECT name FROM category WHERE id = " + categId ;
    String name = oDb.exec(sql).get("name");

    sSql = "SELECT id FROM category WHERE inherit = 'Y' AND parent_id = " + categId ;
    int nextCategId = oDb.exec(sql).get("id");

    if(nextCategId != null){
        return name + "," + getCategory(nextCategId);
    }else{
        return name;
    }

}

Vì vậy, giả sử rằng phân loại của Táo được kế thừa kết quả cho getCategory(1) phải là Fruits,Apples,Green Apples



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ROW_NUMBER () trong MySQL

  2. Biểu mẫu gửi sẽ không ở trên cùng một trang

  3. Thả khóa ngoại không tên trong MySql

  4. Kết nối với mysql trên 000webhost bằng C #

  5. Đếm số lượng giá trị duy nhất