Witam, mam o to takie 3 tabele :
-- 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.