![]() |
![]() |
![]()
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 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
-------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
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 557 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 -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
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 ![]() 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 557 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 -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
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 557 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 -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
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 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
No nie, obróbka php musi być.
Poza tym to jest jedno zapytanie ![]() -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 07:42 |