-- sfg_categories - podział na kategorie (jedno warstwowy), w ktorych trzymamy obrazki -- nr kategorii, nazwa, prawa autorskie do obrazkow z tej grupy CREATE TABLE sfg_categories ( cid SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT UNIQUE NOT NULL, cname VARCHAR(255) NOT NULL, ccopyrights VARCHAR(255) NOT NULL DEFAULT '' ); -- sfg_pictures - kazdy obrazek ma swoj numer -- nr obrazka, nr kategorii, nr grupy, szerokosc, wysokosc obrazka CREATE TABLE sfg_pictures ( pid SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT UNIQUE NOT NULL, pcid SMALLINT UNSIGNED NOT NULL, pgid SMALLINT UNSIGNED NOT NULL, -- te same obrazki, ale w roznej rozdzielczosci maja ten sam numer psizex SMALLINT UNSIGNED NOT NULL, -- szerokosc psizey SMALLINT UNSIGNED NOT NULL -- wysokosc ); -- sfg_groups - grupy tworza obrazki, ktore maja ten sam obrazek, ale w roznej rozdzielczosci -- nr grupy, data utworzenia grupy, typ/rozszezenie pliku, opis grupy CREATE TABLE sfg_groups ( gid SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT UNIQUE NOT NULL, gdate TIMESTAMP NOT NULL, -- dodawana automatycznie gtype VARCHAR(6) NOT NULL DEFAULT 'jpg', -- typ pliku gdesc VARCHAR(255) NOT NULL DEFAULT 'brak opisu' -- opis co przedstawia obrazek );
Chciałbym teraz uzyskać zapytanie, które zwróci mi ilość grup w poszczególnych kategoriach. Próbowałem w ten sposób:
SELECT cid, cname, count(*) AS ng 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.