![]() |
![]() |
![]()
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 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 207 Pomógł: 25 Dołączył: 16.11.2006 Ostrzeżenie: (0%) ![]() ![]() |
Kod SELECT name FROM tabela ORDER BY parent_id ASC, id ASC EDIT: Jednak nie. Nie wiem w jaki sposób to jest poukładane... ORDER BY name DESC? Ten post edytował paziek 25.06.2010, 10:21:45 |
|
|
![]()
Post
#3
|
|
Grupa: Moderatorzy Postów: 36 559 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
|
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 46 Pomógł: 0 Dołączył: 28.05.2010 Ostrzeżenie: (0%) ![]() ![]() |
Ale w tych przykładach uzyte są 2 tabelki a jak zrobić to z jedną tabelką jak w poście 1?
|
|
|
![]()
Post
#5
|
|
Grupa: Moderatorzy Postów: 36 559 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Analogicznie. Left join robisz na tę samą tabelę.
glowny warunek ma byc parent_id = 0 a left join ma byc łączony przez parent_id Ale skoro to jet |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 46 Pomógł: 0 Dołączył: 28.05.2010 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#7
|
|
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:
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:
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.
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:
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. |
|
|
![]()
Post
#8
|
|
Grupa: Moderatorzy Postów: 36 559 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Cytat hmm nie bardzo chce to dzialac: A konkretnie?SELECT DISTINCT c.name FROM pobierasz tylko name jednej tabeli. left joina olales.czemu? mowilem ci tez ze ma byc warunek WHERE c.parent_id=0 |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 46 Pomógł: 0 Dołączył: 28.05.2010 Ostrzeżenie: (0%) ![]() ![]() |
A konkretnie? SELECT DISTINCT c.name FROM pobierasz tylko name jednej tabeli. left joina olales.czemu? mowilem ci tez ze ma byc warunek WHERE c.parent_id=0 select c.name from #__cd_categories c join #__cd_categories p on p.parent_id = c.ID order by c.NAME asc, p.NAME asc left join jest ale jak dam where c.parent_id = 0 to nie zwraca nic. Pzrepraszam dla: select c.name from #__cd_categories c left join #__cd_categories p on p.parent_id = c.ID where c.parent_id = 0 order by c.NAME asc, p.NAME asc zwraca podwójna tablice dla 0 vw vw audi audi |
|
|
![]()
Post
#10
|
|
Grupa: Moderatorzy Postów: 36 559 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
select c.name from
miales tego SELECT rozwinac o pobranie danych z left join. Jak tego nie zrobic to tracisz info o podkategoriach Cytat zwraca podwójna tablice dla 0 I prawidłowo. Dalej w linku co podalem masz napisane jak ją obrobic. Ale najpierw w SELECT pobierz pozostałe dane.vw vw audi audi |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 46 Pomógł: 0 Dołączył: 28.05.2010 Ostrzeżenie: (0%) ![]() ![]() |
a czy nie da sie tego w jednym zapytaniu? bez obróbki php?
|
|
|
![]()
Post
#12
|
|
Grupa: Moderatorzy Postów: 36 559 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
No nie, obróbka php musi być.
Poza tym to jest jedno zapytanie (IMG:style_emoticons/default/smile.gif) |
|
|
![]() ![]() |
![]() |
Aktualny czas: 16.10.2025 - 09:32 |