Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Liczenie powiazanych rekordow a zera/UNION
Forum PHP.pl > Forum > Bazy danych > PostgreSQL
ucho
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.
nevt
powinno ci wystarczyć coś w rodzaju:
  1. SELECT *, COUNT(a_id) AS ilosc FROM a LEFT JOIN ab ON id = a_id GROUP BY a_id;

powodzenia
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.