![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 12 Pomógł: 0 Dołączył: 30.11.2007 Skąd: Bydgoszcz Ostrzeżenie: (0%) ![]() ![]() |
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? Ten post edytował Neider 8.09.2011, 18:23:02 |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 19.07.2025 - 11:05 |