Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Prośba o pomoc w konstrukcji zapytania sql
rafweb
post
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 3.05.2011

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


Witam
Uczę się MySQL'a i stanąłem przed takim problemem:

Mam 2 tabele.

1 zawiera kategorie.
2 zawiera przepisy (relacja po id_cat)

Potrzebuje napisać takie zapytanie, które wyrzuci wszystkie kategorie z tabeli 1, i równocześnie zliczy wszystkie przepisy z tabeli 2 należące do poszczególnych kategorii, czyli osiągnąć coś w rodzaju:

- kategoria 1 (ilość przepisów w kategorii)
- kategoria 2 (ilość przepisów w kategorii)
(..)

Z tematem poradziłem sobie za pomocą dwóch zapytań:

  1. SELECT * FROM `sql_categories`
  2.  
  3. SELECT id_cat, COUNT( id_cat ) FROM `sql_recipes` GROUP BY id_cat


ale chciałbym to załatwić jednym. Zakładam, że trzeba to zrobić jakoś z podzapytaniem, ale nigdy podzapytań jeszcze nie stosowałem i nie orientuje się w nich za dobrze. Próbowałem, ale nic z tego nie wyszło.

Proszę o pomoc w konstrukcji zapytania do bazy.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
pmir13
post
Post #2





Grupa: Zarejestrowani
Postów: 282
Pomógł: 89
Dołączył: 12.04.2011

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


1. Łączysz pierwsze zapytanie z drugim po wspólnym kluczu przy pomocy LEFT JOIN, czyli w taki sposób by zwrócić wszystkie wyniki z pierwszego zapytania i odpowiadające im wyniki z drugiego, o ile istnieją, a jeśli nie istnieją to NULL.
2. Wykorzystujesz COALESCE by zamiast NULL wstawić 0 dla kategorii bez przepisów.

  1. SELECT c.*, COALESCE( r.num, 0 ) AS num
  2. FROM sql_categories c
  3. LEFT JOIN ( SELECT id_cat, count( id_cat ) AS num
  4. FROM sql_recipes
  5. GROUP BY id_cat ) r
  6. ON c.id = r.id_cat
Go to the top of the page
+Quote Post
rafweb
post
Post #3





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 3.05.2011

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


Działa idealnie. Dokładnie o to chodziło.

Dzięki wielkie - muszę sobie to dokładnie przeanalizować i będę wiedział na przyszłość.
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 - 21:50