Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: podzapytanie w zapytaniu - wybór kolumn
Forum PHP.pl > Forum > Bazy danych
RysQ
Mam zapytanie z podzapytaniem, w których pobieram dane z tabeli kategorii wraz z ilością tematów w tej kategorii

"SELECT @A:=id,name,description, (SELECT COUNT(id) FROM topics WHERE category = @A) AS all_rows FROM categories"

W związku z tym, że w tabeli categories doszło mi kilka kolumn chciałbym uniknąć wypisywanie w selekcie nazw ich wszystkich.

Próbowałem

"SELECT *,@A:=id, (SELECT COUNT(id) FROM topics WHERE category = @A) AS all_rows FROM categories"

i niby działa
ale tworzy mi wtedy zupełnie nie potrzebnie zduplikowaną kolumnę id pod nazwą, "@A:id".

Jakaś podpowiedź jak skonstruować zapytanie aby pobierać wszystkie kolumny z categories, jednocześnie dalej liczyć ilosć tematów z danej kategorii, ale bez wypisywania nazw wszystkich kolumn do pobrania?

@Edit:
już wykminiłem:
"SELECT c.*, (SELECT COUNT(id) FROM topics WHERE category = c.id) AS all_rows FROM categories AS c"

chyba, że można jeszcze lepiej smile.gif
mmmmmmm
  1. SELECT c.*, Coalesce(sub.ilosc,0) ilosc FROM categories c JOIN (SELECT category, count(*) ilosc FROM topics GROUP BY category) sub ON sub.category=c.id
RysQ
Przy takim zapytaniu w przypadku gdy kategoria ma 0 tematów w ogóle nie zostania pobrana
phpion
To zmień JOIN na LEFT JOIN.
RysQ
Zapytanie mmmmmmm wydaje mi się dużo bardziej skomplikowane niż to, które przedstawiłem.

No ale skoro uważacie, że tak jest lepiej to nie będę się kłócił tongue.gif

Ps żeby nie zakładać nowego tematu, który Pewnie nadawał by się do przedszkola.
Zastanawia mnie komunikat jaki zwraca MySql w przypadku tych dwóch zapytań

  1. SELECT c.*, (SELECT COUNT(id) FROM topics WHERE category = c.id) AS all_rows FROM categories AS c

komunikat:
Zapytanie SQL zostało wykonane pomyślnie

  1. SELECT c.*, Coalesce(sub.ilosc,0) ilosc FROM categories c JOIN (SELECT category, count(*) ilosc FROM topics GROUP BY category) sub ON sub.category=c.id

komunikat:
Showing rows 0 - 1 (2 total, Wykonanie zapytania trwało 0.0000 sekund(y)) - czyli taki standardowy, że tak powiem tongue.gif

Skąd wynika ta różnica?
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.