Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> parent_id i group by
miojamo
post
Post #1





Grupa: Zarejestrowani
Postów: 46
Pomógł: 0
Dołączył: 28.05.2010

Ostrzeżenie: (0%)
-----


Witam,


Struktura tabeli

id | parent_id| name
1 0 vw
2 0 audi
3 2 a3
4 1 passat
....


Potzrebuje wyswietlic array poukladana czyli

- vw
--passat
- audi
-- a3


dzieki
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
phpion
post
Post #2





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Opiszę Ci jak ja to robię. Będę bazował na Twoim przykładzie i danych.

1. Wykonujesz zapytanie:
  1. SELECT * FROM categories ORDER BY name ASC;

Dzięki temu będziesz miał dane odpowiednio posortowane (jako kolumna sortująca możesz wybrać cokolwiek).

2. Pobierasz dane, przelatujesz po nich pętlą - nie podam Ci dokładnego kodu, ale napiszę jaką tablicę powinieneś dostać na wyjściu:
  1. $data = array(
  2. 0 => array(
  3. array('id' => 2, 'parent_id' => 0, 'name' => 'audi'),
  4. array('id' => 1, 'parent_id' => 0, 'name' => 'vw')
  5. ),
  6. 2 => array(
  7. array('id' => 3, 'parent_id' => 2, 'name' => 'a3')
  8. ),
  9. 1 => array(
  10. array('id' => 4, 'parent_id' => 1, 'name' => 'passat')
  11. )
  12. );

Struktura jest taka: klucz tablicy to po prostu parent_id, a wartości to tablica elementów przyporządkowanych do danego rodzica. Kolejność kluczy nie ma większego znaczenia, ważne, że dzieciaki są uporządkowane (IMG:style_emoticons/default/winksmiley.jpg) według porządku, który podałeś w ORDER BY.

3. Wyświetlenie drzewa to prosta funkcja rekurencyjna, do której podajesz jako parametr całą tablicę danych oraz id aktualnie generowanego poziomu, np.
  1. $tree = tree($data, 0);

Ten kod powinien wyświetlić tylko elementy dla parent_id = 0 czyli audi i vw.

4. Wewnątrz tej funkcji iterujesz po każdych elementach danego poziomu (dla 0 wspomniane audi i vw). Po wyświetleniu danego elementu wykonujesz rekurencyjnie:
  1. $return .= tree($data, $item['parent_id']);

dzięki czemu będziesz miał również wyświetlanie kolejnych potomków.

Całość najlepiej wyświetlić w postaci listy <ul> - będziesz wówczas widział wszelkie zagnieżdżenia.

Jeśli będziesz miał problemy to śmiało pisz.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 7.10.2025 - 04:37