(Có rất nhiều cách tiếp cận đối với các vòng lặp / truy vấn lồng nhau .. ý tưởng thay đổi cấu trúc sẽ là có một bảng riêng liệt kê tất cả các phần tử con của mỗi danh mục .. và đảm bảo rằng nó không chỉ có các phần tử con trực tiếp mà còn có các bảng phụ -các con và con phụ ... như 1 có con 2, 2 có con 3, 1 có con 3, 3 có con 5, 1 có con 5 ..v.v ..) NHƯNG, đối với tình hình hiện tại ..
Một cấu trúc vòng lặp có thể là:
Bắt đầu tập kết quả. || Truy vấn cho tất cả id danh mục trong đó cha =0. || Thêm từng vào mảng (X). || Đóng tập kết quả.
Đối với mỗi id trong mảng (X):
- Thiết lập một biến đếm mới (z).
-
Thiết lập một mảng id con mới (Y).
-
Bắt đầu tập kết quả. || Số lượng truy vấn * cho tất cả các mục có thể loại =id hiện tại x || Thêm vào biến đếm (z) || Đóng tập kết quả.
-
Bắt đầu tập kết quả. || Truy vấn cho tất cả id danh mục mà cha =id hiện tại x || Thêm tất cả vào mảng id con (Y). || Đóng tập kết quả.
-
trong khi độ dài mảng con (Y)> 0
-
id danh mục y =mục đầu tiên trong mảng (Y)
-
Bắt đầu tập kết quả. || Truy vấn cho tất cả id danh mục trong đó parent =id y hiện tại. || Thêm tất cả vào mảng id con (Y). || Đóng tập kết quả.
-
Bắt đầu tập kết quả. || Số lượng truy vấn * cho tất cả các mục có danh mục =id y hiện tại || Thêm vào biến đếm (z) || Đóng tập kết quả.
-
xóa mục đầu tiên khỏi mảng (Y)
-
-
tiếp tục vòng lặp while
-
Tại thời điểm này, bạn có số mục cuối cùng (z) cho id danh mục x ... hãy làm điều gì đó với nó, sau đó tiếp tục với vòng lặp for
Kết thúc vòng lặp