Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> 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 (IMG:style_emoticons/default/smile.gif)

Ten post edytował RysQ 12.06.2015, 01:39:59
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
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ł (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/tongue.gif)

Skąd wynika ta różnica?
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 24.08.2025 - 04:31