Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> 2 tabele wybrenie rekordów z jednej plus zliczenie rekordów z drugiej
WiruSSS
post
Post #1





Grupa: Zarejestrowani
Postów: 83
Pomógł: 7
Dołączył: 3.02.2007

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


Witam

Mam 2 tabele, przykładowo:
`pomieszczenie` z kolumnami `id`, `parent_id`, `numer`
`zwierzaki` z kolumnami `id`,`nazwa`

pomieszczenia jak widać mogą zawierać mniejsze pomieszczenia `parent_id`

potrzebuję zrobić takie zapytanie żeby wybrać wszytkie pomieszczenia i policzyć ile w każdym z nich jest zwierzaków bezpośrednio i pośrednio

Przyjmijmy że mam pokój nr 1 w tym pokoju są pokoje nr 2 i nr 3 ...w samym pokoju nr 1 nie ma żadnego zwierzak w pokoju nr 2 są 2 a w pokoju nr 3 jet ich 5 więc chciałbym uzyskać taki wynik:

1,0,8 - czyli odpowiednio id pokoju, liczba zwierzaków z pokoju nr 1 bezpośrednio, liczba zwierzaków w pokoju pośrednio

Drugi przypadek mamy pokój nr 4 a w tym pokoju mamy pokoje nr 5 i 6, w pokoju nr 4 jest 10 zwierzaów a w mniejszych odpowiednio 2 i 4 więc chciałbym uzyskać wynik:

4,10,16 - czyli odpowiednio jak w poprzednim przykładzie.

da sie, to zrobić jednym zapytaniem bez podzapytań?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Noidea
post
Post #2





Grupa: Zarejestrowani
Postów: 226
Pomógł: 61
Dołączył: 20.08.2010

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


Nie dawało mi to spokoju, zrobiłem kilka prób i ... da się to zapisać w jednym zapytaniu:
  1. SELECT p1.id,
  2. COUNT( DISTINCT z1.id ) AS zwierzakow_w_glownym_pokoju,
  3. COUNT( DISTINCT z1.id ) + COUNT( DISTINCT z2.id ) AS zwierzakow_lacznie
  4. FROM pomieszczenie p1
  5. INNER JOIN pomieszczenie p2 ON ( p1.id = p2.parent_id )
  6. LEFT JOIN zwierzaki z1 ON ( p1.id = z1.room_id )
  7. LEFT JOIN zwierzaki z2 ON ( p2.id = z2.room_id )
  8. WHERE p1.parent_id = 0
  9. GROUP BY p1.id


Nie wiem tylko czy wykorzystanie podzapytań nie uprościłoby tego
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: 9.10.2025 - 17:50