Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Zliczanie grup w danej kategorii
sf
post 31.12.2004, 00:41:19
Post #1





Grupa: Zarejestrowani
Postów: 1 597
Pomógł: 30
Dołączył: 19.02.2003
Skąd: Tychy

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


Witam, mam o to takie 3 tabele :
  1. -- sfg_categories - podział na kategorie (jedno warstwowy), w ktorych trzymamy obrazki
  2. -- nr kategorii, nazwa, prawa autorskie do obrazkow z tej grupy
  3.  
  4. CREATE TABLE sfg_categories (
  5. cid SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT UNIQUE NOT NULL,
  6. cname VARCHAR(255) NOT NULL,
  7. ccopyrights VARCHAR(255) NOT NULL DEFAULT ''
  8. );
  9.  
  10. -- sfg_pictures - kazdy obrazek ma swoj numer
  11. -- nr obrazka, nr kategorii, nr grupy, szerokosc, wysokosc obrazka
  12.  
  13. CREATE TABLE sfg_pictures (
  14. pid SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT UNIQUE NOT NULL,
  15. pcid SMALLINT UNSIGNED NOT NULL,
  16. pgid SMALLINT UNSIGNED NOT NULL, -- te same obrazki, ale w roznej rozdzielczosci maja ten sam numer
  17. psizex SMALLINT UNSIGNED NOT NULL, -- szerokosc
  18. psizey SMALLINT UNSIGNED NOT NULL -- wysokosc
  19.  
  20. );
  21.  
  22. -- sfg_groups - grupy tworza obrazki, ktore maja ten sam obrazek, ale w roznej rozdzielczosci
  23. -- nr grupy, data utworzenia grupy, typ/rozszezenie pliku, opis grupy
  24.  
  25. CREATE TABLE sfg_groups (
  26. gid SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT UNIQUE NOT NULL,
  27. gdate TIMESTAMP NOT NULL, -- dodawana automatycznie
  28. gtype VARCHAR(6) NOT NULL DEFAULT 'jpg', -- typ pliku
  29. gdesc VARCHAR(255) NOT NULL DEFAULT 'brak opisu' -- opis co przedstawia obrazek
  30. );

Chciałbym teraz uzyskać zapytanie, które zwróci mi ilość grup w poszczególnych kategoriach. Próbowałem w ten sposób:
  1. SELECT cid, cname, count(*) AS ng
  2. FROM sfg_categories, sfg_pictures WHERE pcid = cid GROUP BY cid, cname ORDER BY cname ASC

Niestety zlicza dodatkowo rozdzielczości. Czyli jeżeli grupa zawiera obrazek w rozdzielczości 800x600 i 1024x768 to liczy jako 2 pozycje, a powinno jako jedną.
Zastanawiam się także czy może nie lepszym rozwiązaniem byłoby przeniesienie pcid (nr kategorii) z sfg_pictures do sfg_groups. Wtedy chyba powinno się dać łatwo stworzyć zapytanie do policzenia, ale nie wiem czy nie spwoduje to problemów z innymi zapytaniami :-/. Gubie się jak chodzi o SQL bo mój mózg nie umie tego wszystkiego naraz pojąć ;] Eksperymentowanie natomiast zajmuje bardzo dużo czasu. Yh.


--------------------
Zapraszam na mój php blog, tworzenie stron.
Go to the top of the page
+Quote Post
popbart
post 31.12.2004, 10:00:54
Post #2





Grupa: Zarejestrowani
Postów: 255
Pomógł: 0
Dołączył: 22.04.2004
Skąd: Żoliborz

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


Cytat
  1. SELECT cid, cname, count(*) AS ng
  2.  
  3. FROM sfg_categories, sfg_pictures
  4. WHERE pcid = cid GROUP BY cid, cname ORDER BY cname ASC

Niestety zlicza dodatkowo rozdzielczości


Moze tak:
  1. SELECT pcid AS kategoria, count( pgid) AS ilosc_grup
  2. FROM sfg_pictures GROUP BY pcid

A z relacjami to juz sobie poradzisz smile.gif (pamiętaj tylko żeby używać tabela.pole) winksmiley.jpg

Jeszcze pytanko, czy grupa nie powinna być połączona relacją z kategorią?


--------------------
Visual Basic - kto by pomyślał :)
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 Wersja Lo-Fi Aktualny czas: 16.06.2025 - 19:52