Witam
Na stronie której piszę umożliwiłem administratorowi, dodawanie atrybutów produktu. Posiadam 3 tabele. Produkt, Atrybuty, ProduktAtrybuty. Problem pojawia się przy wyszukiwaniu w/g tych "dynamicznych" pól. Zakładam że może byc dowolna liczba pól w.g których można szukać.
Tabela produktów:
- id
- inne pola opisujące produkt
Tabela atrybuty:
- id
- nazwa
- typ
tabela ProduktyAtrybuty:
- id
- produkt_id
- atrybut_id
- wartosc
Przykładowe dane w ProduktyAtrybuty:
ID | produkt_id | atrybut_id | wartosc
1 | 1 | 1 | 1
2 | 1 | 2 | 1
3 | 2 | 1 | 2
4 | 2 | 2 | 1
Teraz załóżmy że użytkownik chce wyszukać poprzez formularz, produkt który miałby atrybut_id 1 o wartości 1 oraz atrybut_id 2 również o wartości 1.
Próbowałem wielu zapytań jednak nic co by działało przy jednym zapytaniu mi nie udało się napisać:
SELECT p.produkt_id FROM produktyatrybuty p WHERE (p.atrybut_id = 1 AND p.wartosc = 1) OR (p.atrybut_id = 2 AND p.wartosc = 1)
Dla każdego kolejnego atrybutu, jeżeli uczestniczyłby w wyszukiwaniu dodawałbym kolejną parę OR (p.atrybut_id = id AND p.wartosc = wartosc).
To zapytanie daje mi praktycznie ile razy dany produkt występuje w atrybutach i jeżeli ilośc wystapień = ilości atrybutów w/g których wyszukuje, wtedy zapisuje ID i następnie wyszukuje juz produkty w ID w tablicy. Rozwiązanie to uważam za beznadziejne, jednak nic lepszego mi nie wpadło do głowy na razie. Ktoś miał może z czymś podobym do czynienia? Mógłby mnie ktoś nakierować, czy da się to załatwić jakoś jednym zapytaniem wyciągającym od razu produkty?