Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: LEFT JOIN + COUNT + 0
Forum PHP.pl > Forum > Bazy danych
phpion
Hej!
Mam 2 tabele
  1. CREATE TABLE download (
  2. id SMALLINT(4) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
  3. category TINYINT(2) UNSIGNED NOT NULL DEFAULT '1',
  4. name VARCHAR(50) NOT NULL,
  5. size FLOAT(7,1) NOT NULL,
  6. visible ENUM('0', '1') NOT NULL DEFAULT '1',
  7. date DATE NOT NULL
  8. );
  9.  
  10. CREATE TABLE download_categories (
  11. id TINYINT(3) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT,
  12. name VARCHAR(50) NOT NULL,
  13. visible ENUM('0', '1') NOT NULL DEFAULT '1'
  14. );

Oraz zapytanie:
  1. SELECT dc.id, dc.name, COUNT(d.id) AS counter FROM download_categories AS dc LEFT JOIN download AS d ON (dc.id=d.category) WHERE d.visible='1' GROUP BY d.category ORDER BY d.name DESC

ktore ma za zadanie wyswietlic dane:
id kategorii | nazwa kategorii | liczba plikow
gdzie zliczanie liczby plikow powinno zliczac tylko te, ktorych visible='1'. No i dziala fajnie, ale jesli w danej kategorii nie ma zadnego pliku to nie uwzglednia jej w zestawieniu sad.gif Jak poprawic to zapytanie aby wyswietlilo takze puste kategorie (z counter rownym 0).
PS: nigdy JOINow nie czailem wiec jesli widac jakies razace bledy prosze o info winksmiley.jpg
siemakuba
Tak na szybko to wydaje mi się, że powinieneś zmienić grupowanie.
Zamiast
  1. GROUP BY d.category
spróbuj dać
  1. GROUP BY dc.id


pozdr.
phpion
NIestety dziala tak samo... Ponizej zamieszczam poszczegolne zapytania i efekty ich wywolan:
  1. mysql> SELECT dc.id, dc.name, COUNT(d.id) AS counter FROM download_categories AS dc LEFT JOIN download AS d ON (dc.id=d.category) WHERE d.visible='1' GROUP BY d.category ORDER BY d.name DESC;
  2. +----+------------------+---------+
  3. | id | name | counter |
  4. +----+------------------+---------+
  5. | 12 | Mp3 | 2 |
  6. | 11 | Dokumentacja SAP | 5 |
  7. +----+------------------+---------+
  8. 2 rows IN SET (0.07 sec)
  9.  
  10. mysql> SELECT dc.id, dc.name, COUNT(d.id) AS counter FROM download_categories AS dc LEFT JOIN download AS d ON (dc.id=d.category) WHERE d.visible='1' GROUP BY dc.id ORDER BY d.name DESC;
  11. +----+------------------+---------+
  12. | id | name | counter |
  13. +----+------------------+---------+
  14. | 12 | Mp3 | 2 |
  15. | 11 | Dokumentacja SAP | 5 |
  16. +----+------------------+---------+
  17. 2 rows IN SET (0.00 sec)
  18.  
  19. mysql> SELECT * FROM download; +----+----------+-------------------------------------+--------+---------+------------+
  20. | id | category | name | size | visible | date |
  21. +----+----------+-------------------------------------+--------+---------+------------+
  22. | 1 | 2 | autoexec.cfg | 0.2 | 1 | 2006-11-25 |
  23. | 2 | 2 | readme.html | 6.2 | 1 | 2006-11-25 |
  24. | 3 | 2 | cube_unix | 0.8 | 1 | 2006-11-25 |
  25. | 4 | 2 | 10533-rs.jpg | 35.9 | 0 | 2006-11-25 |
  26. | 5 | 2 | 4326-b.jpg | 69.4 | 1 | 2006-11-25 |
  27. | 6 | 2 | 9628-rs.jpg | 39.5 | 1 | 2006-11-25 |
  28. | 7 | 3 | 9823-rs.jpg | 46.5 | 1 | 2006-11-25 |
  29. | 8 | 2 | 10464-rs.jpg | 7.7 | 1 | 2006-11-25 |
  30. | 9 | 1 | 10890-rs.jpg | 18.0 | 1 | 2006-11-25 |
  31. | 10 | 1 | 10890-b.jpg | 42.7 | 1 | 2006-11-25 |
  32. | 11 | 1 | program.doc | 34.5 | 1 | 2006-11-25 |
  33. | 12 | 1 | MOJEbazy26042006.txt | 2.3 | 1 | 2006-11-25 |
  34. | 13 | 2 | 00a Wprowadzenie 2004 C PL.pdf | 1625.1 | 1 | 2006-11-26 |
  35. | 14 | 4 | 01 Administracja 2004 C PL.pdf | 1719.4 | 1 | 2006-11-26 |
  36. | 21 | 11 | 01 Administracja 2004 C PL.pdf | 1719.4 | 1 | 2006-11-26 |
  37. | 25 | 11 | 04 Sprzedaz 2004 C PL.pdf | 922.1 | 1 | 2006-11-26 |
  38. | 26 | 11 | 05 Zakup 2004 C PL.pdf | 1549.2 | 1 | 2006-11-26 |
  39. | 19 | 11 | 00a Wprowadzenie 2004 C PL.pdf | 1625.1 | 1 | 2006-11-26 |
  40. | 28 | 12 | klubowy.MP3 | 1606.0 | 1 | 2006-11-26 |
  41. | 27 | 11 | 06 Partnerzy handlowi 2004 C PL.pdf | 842.1 | 1 | 2006-11-26 |
  42. | 30 | 12 | rottweiler_new.MP3 | 1562.1 | 1 | 2006-11-26 |
  43. +----+----------+-------------------------------------+--------+---------+------------+
  44. 21 rows IN SET (0.00 sec)
  45.  
  46. mysql> SELECT * FROM download_categories; +----+------------------+---------+
  47. | id | name | visible |
  48. +----+------------------+---------+
  49. | 13 | Zdjcia | 1 |
  50. | 12 | Mp3 | 1 |
  51. | 11 | Dokumentacja SAP | 1 |
  52. +----+------------------+---------+
  53. 3 rows IN SET (0.00 sec)
bumelang
Spróbuj coś w tym stylu

  1. SELECT id, name, (SELECT COUNT(*)
  2. FROM download WHERE category = dc.id AND visible = true)
  3. FROM download_categories AS dc


Oczywiście nie wiem, czy to zadziała z palca, ale chyba rozumiesz ideę.
phpion
Dziala! Dzieki.
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.