Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zapytanie
Forum PHP.pl > Forum > Bazy danych
dreamweb
Witam

mam strukture tabeli

id (auto int), parent (int), nazwa (varchar)

i w tabeli mam przykladowe dane

1, 0, text1
2, 0, text2
3, 2, text3
4, 1, text4
5, 1, text5
6, 2, text6


itd.....

itd

Teraz chcialbym uzyskac zapytanie, ktore wybierze mi z tej bazy wszystkie wg schematu:

gdzie parent = 0

i jednoczesnie

gdzie parent=id

Tzn. w wyniku chcialbym uzyskac strukture:

id1, parent1, nazwa1, id2, parent2, nazwa2

z danymi
1, 0, text1, null, null, null
2, 0, text2, null, null, null
2, 0, text2, 3, 2, text3
1, 0, text1, 4, 1, text4
1, 0, text1, 5, 1, text5
2, 0, text2, 6, 2, text6

Czy jest to mozliwe?
BzikOS
[sql:1:f92bb4f6d6]SELECT d.*, d2.* FROM drzewko d LEFT JOIN drzewko d2 ON (d2.id = d.parent)[/sql:1:f92bb4f6d6]

questionmark.gif
dreamweb
Witam

no niestety to nie to, sprawdzalem

moze cos innego?
BzikOS
Więc w takim razie nie rozumiem logiki w wyniku jaki ma zwracać to zapytanie.
dreamweb
Witam

Naprawde nikt nie wie?
Indeo
Masz tu trochę zachachmęcone.
To klasyczny przykład sprzężenia wewnętrznego gdzie dane z jednej tabeli w sposób hierarchiczny odwołują się do niej samej na zasadzie podwładny-kierownik.

Na pewno będzie trzeba sprzęgnąć tą tabelę ze sobą na zasadzie:

select [select_sequence] FROM tabela [INNER|LEFT|RIGHT] JOIN tabela as tabela1 on [join_sequence] WHERE [where_sequence]

Musisz zatem ostrożnie mówić o polach zwłaszcza ID i PARENT bo pełnią pne podwójną funckję i występują w tabeli postawowej i jej aliasie.

Chcemy podłączyć tabelę 'tabela' jako 'tabela1' do tabeli 'tabela' z żądaniem aby pole 'tabela1.parent' było równe 'tabela.id' a jednocześnie żądasz aby 'tabela.parent' był = 0.

I jest to prosta sprawa.
  1. SELECT * FROM tab LEFT JOIN tab AS tab1 ON tab.id=tab1.parent WHERE tab.parent=0


Jednak zapytanie to zwraca wynik 4 wierszowy:

1 0 text1 4 1 text4
1 0 text1 5 1 text5
2 0 text2 3 2 text3
2 0 text2 6 2 text6

brakuje tu dwóch pierwszych wierszy z twojego "żądanego wyniku". I baza nie może ich zwrócić bo niby dlaczego? Z twojego wyniku wynika że wierszom o id=1 i id=2 raz można przypisać "potomka" a raz nie. A tymczasem kazdy z tych dwu rekordów ma przypisanych dwóch potomków i nie można im podopisywac jeszcze NULL'ów.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.