Przetwarzanie hierarchii drzewa z bazy

0

Witam.
Nie mam pomysłu na to jak przetworzyć dane uzyskane z bazy danych. Są to komentarze (id_komentarza, id_rodzica, autor, komentarz) z zagnieżdżeniem do dowolnego poziomu (coś ala Disqus). Zapytaniem:

SELECT
k1.id_komentarza, k1.id_rodzica, k1.autor, k1.komentarz, 
k2.id_komentarza as id_komentarza1, k2.id_rodzica as id_rodzica1, k2.autor as autor1, k2.komentarz as komentarz1
FROM Komentarze AS k1 LEFT OUTER JOIN Komentarze AS k2 ON k2.id_rodzica = k1.id_komentarza

uzyskałem przykładowe komentarze:

array (size=9)
  0 => 
    array (size=8)
      'id_komentarza' => string '1' (length=1)
      'id_rodzica' => null
      'autor' => string 'Frania' (length=6)
      'komentarz' => string 'Co doprowadziło do tego błędu?' (length=33)
      'id_komentarza1' => string '2' (length=1)
      'id_rodzica1' => string '1' (length=1)
      'autor1' => string 'Ola' (length=3)
      'komentarz1' => string 'Myślę, że chodzi o pusty wskaźnik' (length=37)
  1 => 
    array (size=8)
      'id_komentarza' => string '2' (length=1)
      'id_rodzica' => string '1' (length=1)
      'autor' => string 'Ola' (length=3)
      'komentarz' => string 'Myślę, że chodzi o pusty wskaźnik' (length=37)
      'id_komentarza1' => string '3' (length=1)
      'id_rodzica1' => string '2' (length=1)
      'autor1' => string 'Frania' (length=6)
      'komentarz1' => string 'Nie, sprawdziłam to.' (length=21)
  2 => 
    array (size=8)
      'id_komentarza' => string '1' (length=1)
      'id_rodzica' => null
      'autor' => string 'Frania' (length=6)
      'komentarz' => string 'Co doprowadziło do tego błędu?' (length=33)
      'id_komentarza1' => string '4' (length=1)
      'id_rodzica1' => string '1' (length=1)
      'autor1' => string 'Kasia' (length=5)
      'komentarz1' => string 'Musimy sprawdzić...' (length=20)
  3 => 
    array (size=8)
      'id_komentarza' => string '4' (length=1)
      'id_rodzica' => string '1' (length=1)
      'autor' => string 'Kasia' (length=5)
      'komentarz' => string 'Musimy sprawdzić...' (length=20)
      'id_komentarza1' => string '5' (length=1)
      'id_rodzica1' => string '4' (length=1)
      'autor1' => string 'Ola' (length=3)
      'komentarz1' => string 'Tak, tam jest błąd.' (length=21)
  4 => 
    array (size=8)
      'id_komentarza' => string '4' (length=1)
      'id_rodzica' => string '1' (length=1)
      'autor' => string 'Kasia' (length=5)
      'komentarz' => string 'Musimy sprawdzić...' (length=20)
      'id_komentarza1' => string '6' (length=1)
      'id_rodzica1' => string '4' (length=1)
      'autor1' => string 'Frania' (length=6)
      'komentarz1' => string 'Rzeczywiście, dopisz kod sprawdzający!' (length=40)
  5 => 
    array (size=8)
      'id_komentarza' => string '6' (length=1)
      'id_rodzica' => string '4' (length=1)
      'autor' => string 'Frania' (length=6)
      'komentarz' => string 'Rzeczywiście, dopisz kod sprawdzający!' (length=40)
      'id_komentarza1' => string '7' (length=1)
      'id_rodzica1' => string '6' (length=1)
      'autor1' => string 'Kasia' (length=5)
      'komentarz1' => string 'Pomogło.' (length=9)
  6 => 
    array (size=8)
      'id_komentarza' => string '3' (length=1)
      'id_rodzica' => string '2' (length=1)
      'autor' => string 'Frania' (length=6)
      'komentarz' => string 'Nie, sprawdziłam to.' (length=21)
      'id_komentarza1' => null
      'id_rodzica1' => null
      'autor1' => null
      'komentarz1' => null
  7 => 
    array (size=8)
      'id_komentarza' => string '5' (length=1)
      'id_rodzica' => string '4' (length=1)
      'autor' => string 'Ola' (length=3)
      'komentarz' => string 'Tak, tam jest błąd.' (length=21)
      'id_komentarza1' => null
      'id_rodzica1' => null
      'autor1' => null
      'komentarz1' => null
  8 => 
    array (size=8)
      'id_komentarza' => string '7' (length=1)
      'id_rodzica' => string '6' (length=1)
      'autor' => string 'Kasia' (length=5)
      'komentarz' => string 'Pomogło.' (length=9)
      'id_komentarza1' => null
      'id_rodzica1' => null
      'autor1' => null
      'komentarz1' => null

Możecie próbować pisać inne zapytania SQL, ale gwarantuję wam, że zawsze uzyskacie możliwość zagnieżdżania komentarzy do określonego poziomu. Dlatego pytam o pomysł jak to co wyłuskałem, wyświetlić w strukturze drzewa w PHP? :)

Pozdrawiam, Webowiec

1

Spróbuj funkcją rekurencyjną.

0
suvak napisał(a):

Spróbuj funkcją rekurencyjną.

Nie za bardzo wiem jakby ta funkcja miała wyglądać.

1

Dokładnie, rekurencja albo pętla np while(). Pobierasz rodzica i szukasz dzieci. Czyli jedynym zapytaniem sql nie idzie raczej zrobić. Musisz pobrać np rodzica id=null i szukać dzieci którzy mają id rodzica. Powtarzasz to działanie tyle razy, aż zapytanie nic nie zwróci.

1 użytkowników online, w tym zalogowanych: 0, gości: 1