Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zapytanie
dreamweb
post
Post #1





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 13.03.2003
Skąd: Łódź

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


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?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
BzikOS
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 660
Pomógł: 0
Dołączył: 28.08.2002
Skąd: Starachowice

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


[sql:1:f92bb4f6d6]SELECT d.*, d2.* FROM drzewko d LEFT JOIN drzewko d2 ON (d2.id = d.parent)[/sql:1:f92bb4f6d6]

questionmark.gif
Go to the top of the page
+Quote Post
dreamweb
post
Post #3





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 13.03.2003
Skąd: Łódź

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


Witam

no niestety to nie to, sprawdzalem

moze cos innego?
Go to the top of the page
+Quote Post
BzikOS
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 660
Pomógł: 0
Dołączył: 28.08.2002
Skąd: Starachowice

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


Więc w takim razie nie rozumiem logiki w wyniku jaki ma zwracać to zapytanie.
Go to the top of the page
+Quote Post
dreamweb
post
Post #5





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 13.03.2003
Skąd: Łódź

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


Witam

Naprawde nikt nie wie?
Go to the top of the page
+Quote Post
Indeo
post
Post #6





Grupa: Zarejestrowani
Postów: 295
Pomógł: 7
Dołączył: 26.03.2004
Skąd: Opole

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


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.


--------------------
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 19.08.2025 - 21:36