Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Liczenie powiazanych rekordow a zera/UNION
ucho
post
Post #1





Grupa: Zarejestrowani
Postów: 300
Pomógł: 32
Dołączył: 31.07.2006

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


Powiedzmy ze mam 3 tabele: a, ab, b - gdzie ab przechowuje relacje wiele do wiele pomiędzy a i b. chce pobrać z tabeli a pewne dane, oraz ilość powiązanych elementów b. Robie coś w stylu:
  1. SELECT
  2. [...],sum(a.id) AS ilosc
  3. FROM a,ab,b WHERE ab.a_id=a.id AND ab.b_id=b.id

Problem jest taki że oczywiście nie dostaje w wyniku rekordów z 'a' które nie są powiązane z żadnym 'b', a potrzebuje je wyświetlić, wstawiając w to pole 0. Próbowałem czegoś takiego:
  1. SELECT
  2. [...], getCount(a.id)
  3. FROM a,ab,b WHERE ab.a_id=a.id AND ab.b_id=b.id

gdzie getCount to procedura składowa wykonująca odpowiednie zapytanie, czy nawet bezpośrednio podzapytanie w tym miejscu ale jak można się domyślić ma to tragiczną wydajność. Więc myślałem żeby zrobić UNION tego pierwszego zapytania i :
  1. SELECT
  2. [...],'0' AS ilosc
  3. FROM a,ab,b WHERE ab.a_id=a.id AND ab.b_id=b.id

Pozostaje jednak podstawowy problem - jak brać pod uwagę rekordy z tego drugiego zapytania tylko pod warunkiem, że nie ma rekordu o tym samym id w pierwszym zapytaniu?
Mam nadzieje, że to co napisałem da się zrozumieć winksmiley.jpg [..] to lista pól jakie pobieram, nie chciałem zaciemniać tego niepotrzebnymi szczegółami.
Go to the top of the page
+Quote Post

Posty w temacie


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: 21.08.2025 - 11:35