Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Liczenie powiazanych rekordow a zera/UNION
ucho
post 7.02.2008, 11:09:10
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
 
Start new topic
Odpowiedzi (1 - 1)
nevt
post 7.02.2008, 13:18:35
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 595
Pomógł: 282
Dołączył: 24.09.2007
Skąd: Reda, Pomorskie.

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


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


--------------------

-
Oh no, my young coder. You will find that it is you who are mistaken, about a great many things... -
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 Wersja Lo-Fi Aktualny czas: 31.07.2025 - 10:41