Đây chỉ là một Mô hình gần kề đơn giản bàn? Sau đó, không thể trong một truy vấn mà không biết độ sâu tối đa.
Thức ăn cho suy nghĩ là Quản lý dữ liệu phân cấp trong MySQL (mặc dù tôi không ủng hộ việc sử dụng Mô hình tập hợp lồng nhau cho dữ liệu thay đổi thường xuyên).
Với rất nhiều liên kết (bên trái), cụ thể hơn:với càng nhiều liên kết bên trái bằng độ sâu tối đa của cây, nó sẽ có thể thực hiện được trong một truy vấn. Đây là lý do tại sao nhiều người có xu hướng tiết kiệm 'độ sâu' của một danh mục cụ thể, vì vậy bạn sẽ có thể lọc và giới hạn số lượng liên kết trong cùng một bảng với mức độ lành mạnh hơn.
Cá nhân, đối với việc thường xuyên thay đổi dữ liệu:Tôi có xu hướng định cấu hình trình kích hoạt trên chèn / cập nhật, sẽ lưu / lưu vào bộ nhớ cache 'đường dẫn' hiện tại của nút dựa trên id (ví dụ:đường dẫn là '12 / 62/28/345 ', trong đó mỗi bước giữa dấu phân cách /
là khóa chính của nút cha theo đúng thứ tự (cha của 345 là 28, cha của 28 là 62, v.v.)), vì vậy tôi có thể truy vấn nó chỉ với một phép nối như thế này (/ được sử dụng làm dấu phân cách):
SELECT j.*
FROM tablename o
JOIN tablename j
WHERE j.path LIKE CONCAT (o.path,'/%')
AND j.id != o.id -- skip parent asked for.
WHERE o.id = <the id of the node you're looking for>;