Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Prośba o pomoc w konstrukcji zapytania sql
Forum PHP.pl > Forum > Bazy danych > MySQL
rafweb
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.
pmir13
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
rafweb
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ść.
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.