Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> LEFT JOIN + COUNT + 0
phpion
post
Post #1





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




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 (IMG:http://forum.php.pl/style_emoticons/default/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 (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
siemakuba
post
Post #2





Grupa: Przyjaciele php.pl
Postów: 1 112
Pomógł: 20
Dołączył: 10.04.2005

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


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





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




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)


Ten post edytował phpion.com 26.11.2006, 13:53:18
Go to the top of the page
+Quote Post
bumelang
post
Post #4





Grupa: Zarejestrowani
Postów: 36
Pomógł: 0
Dołączył: 30.11.2003

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


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ę.
Go to the top of the page
+Quote Post
phpion
post
Post #5





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




Dziala! Dzieki.
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 - 06:08