Ovako.
Imam 3 tabele.
Prva sadrzi sve proizvode “proizvodi”.
Druga sadrzi sve karakteristike koje jedan proizvod moze da ima, "osobine"
Treca tabela “pro_osobine” sadrzi ID za obe tabele iznad (id_pro i id_osobine).
Tih osobina jednog proizvoda moze da bude vise npr 20-ak, li je za jedan proizvod izabrano npr 5, pa u tabeli “pro_osobine” izgleda ovako
id_pro | id_osobine
1 4
1 5
1 15
1 47
1 20
AKo zelim da filtriram proizvode koji imaju osobine (4, 5, 15, 47, 20), ispisace mi taj proizvod 1.
Ono sto je problematicno kako postaviti uslov da se “id_osobine” u upitu navedu kao
(id_osobine = 4 AND id_osobine = 5 AND id_osobine = 15 AND id_osobine = 47 AND id_osobine = 2)
da jedna kolona bude pozvana vise puta u jednoj tabeli, ali sa razlicitim vrednostima.
Znaci, ako su svi gore navedeni uslovi ispunjen tacnije, da se u tabeli “pro_osobine”, nalazi svaka od navedenih id_osobine za jedan prozvod koji u ovom slucaju ima ID 1 dok, ako imamo ovakav uslov i dodam jos jednu ID vrednost u upitu koja ne postoji u tabeli “pro_osobine”, ne prikaze proizvod:
(id_osobine = 4 AND id_osobine = 5 AND id_osobine = 15 AND id_osobine = 47 AND id_osobine = 2 AND id_osobine = 1442)
Moguce je resiti ovo preko INNER JOIN, ali ako neko izabere u filteru svih 20 osobina, bilo bi previse tih JOINA, sto bi sigurno usporilo ispis proizvoda.
SELECT p.*, o.*
FROM proizvodi p
INNER JOIN osobine o
INNER JOIN pro_osobine pf ON (pf.id_pro = p.id AND pf.id_osobine=4)
INNER JOIN pro_osobine pf1 ON (pf1.id_pro = p.id AND pf1.id_osobine=5)
INNER JOIN pro_osobine pf2 ON (pf2.id_pro = p.id AND pf2.id_osobine=15)
INNER JOIN pro_osobine pf3 ON (pf3.id_pro = p.id AND pf3.id_osobine=47)
INNER JOIN pro_osobine pf4 ON (pf4.id_pro = p.id AND pf4.id_osobine=20)
Treba mi neko bolje resenje za ovu kombinaciju tabela, ili ako imate neki predlog bolje organizacije.