Recursivly PHP basit aðaçta

2 Cevap php

Ben aşağıda şeklini alır basit bir ağaç var

    ROOT
     /\
    A  B
   /    \ 
  A1     B1
          \
           B11

Bu kendi kendine referans bir DB tablo SINIFLARI saklanır.

 ID |  CLASS_ID  | PARENT_ID
 ---------------------------
  1 |     ROOT   |  
  2 |     A      | ROOT
  3 |     A1     | A
  4 |     B      | ROOT
  5 |     B1     | B
  6 |     B11    | B1
 ---------------------------

ve böylece, bu sadece bir örnek, class_id ve parent_id sütunlar tamsayılar vardır ama fikir olsun ben sadece onları bu örneğin karakter yaptı.

Sonra ben sonunda bu gibi bakmak istiyorum ikinci bir tablo ÇOCUKLARI var,

 ID | CLASS_ID   | CHILD_CLASS_ID
 --------------------------------
  1 |     ROOT   |  A
  2 |     ROOT   |  A1
  3 |     ROOT   |  B
  4 |     ROOT   |  B1
  5 |     ROOT   |  B11
  6 |     A      |  A1
  7 |     B      |  B1
  8 |     B      |  B11
  9 |     B1     |  B11
 ---------------------------

Bir sınıf kendi branşında herhangi bir sınıf daha düşük Yani aslında tüm yüksek sınıfların bir çocuk. Bu kesinlikle bir özyineleme sorun olduğunu biliyorum ama gerçekten biraz yardım kullanabilirsiniz PHP için yeni. Ben mysql kullanıyorum. Ben de geriye doğru kateden olacağını belirtmek gerekir. Yani alt sınıfları ekleme duyuyorum. Bir örnek A11 olacağını eklemek için bir sonraki sınıf olur, ben daha sonra tüm yüksek sınıflarını bulmak ve onlara A11 ana sınıfları yapmak kadar çapraz gerekir.

2 Cevap

Umarım yapmak için çalışıyoruz ne kavradılar. Eğer çocuk tablo oluşturmak için geriye doğru çalışmak zorunda mı?

Eğer yukarıdan aşağı çalışmak Eğer bir MySQL GROUP_CONCAT() kullanarak her ebeveyn için tüm alt kimlikleri toplayabilir

SELECT PARENT_ID, GROUP_CONCAT(CLASS_ID) AS CHILDREN
FROM CLASSES
GROUP BY PARENT_ID

Bu gibi bir şey dönmesi gerekir:

| PARENT_ID | CHILDREN      |
-----------------------------
| ROOT      | A,A1,B,B1,B11 |
| A         | A1            |
| B         | B1,B11        |
| A1        |               |
| B1        | B11           |
| B11       |               |
-----------------------------

Sonra o kadar kırmak ve ÇOCUK masa doldurabilirsiniz?

Eğer size sahip oldu yapmak zorunda mı? Bence onun bir realllly kötü bir yol. Sen sanki bir Adjacency List kullanmak nereye sorguları basit, karmaşık bir hale sensin.

Bu bir göz atın.

http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/