Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> podzapytanie w zapytaniu - wybór kolumn
RysQ
post
Post #1





Grupa: Zarejestrowani
Postów: 14
Pomógł: 3
Dołączył: 11.06.2015

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


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

Ten post edytował RysQ 12.06.2015, 01:39:59
Go to the top of the page
+Quote Post
mmmmmmm
post
Post #2





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

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


  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
Go to the top of the page
+Quote Post
RysQ
post
Post #3





Grupa: Zarejestrowani
Postów: 14
Pomógł: 3
Dołączył: 11.06.2015

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


Przy takim zapytaniu w przypadku gdy kategoria ma 0 tematów w ogóle nie zostania pobrana
Go to the top of the page
+Quote Post
phpion
post
Post #4





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




To zmień JOIN na LEFT JOIN.
Go to the top of the page
+Quote Post
RysQ
post
Post #5





Grupa: Zarejestrowani
Postów: 14
Pomógł: 3
Dołączył: 11.06.2015

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


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?
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 Aktualny czas: 20.08.2025 - 06:30