![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 159 Pomógł: 5 Dołączył: 31.08.2007 Ostrzeżenie: (0%) ![]() ![]() |
Ponownie wracam z problemem. Tym razem nieco innym niż dotychczas..
Mianowicie chodzi mi o to że mam bazę produktów. Produkty oczywiście są skategoryzowane (wg. parent_id i drzewek ip - pomysł wzięty stąd). Do kategorii są przypisane parametry które mogą być wykorzystane przy dodawaniu produktu - podobnie jak na allegro... Przy przeglądaniu listy produktów z jakiejś kategorii jest widoczny boks w którym można określić interesujące kogoś parametry - np. rodzaj paliwa (diesel, benzyna, lpg itp.). No i teraz problem. Gdy ktoś wybierze tylko jeden parametr to sprawa jest załatwiona, ale jeśli ktoś wybierze 2 lub więcej, czyli np. rodzaj paliwa: lpg, lakier: metalic, kolor: zielony Wtedy jest oczywiste że nie powinien brać każdego rekordu w którym któryś z tych parametrów występił, a jedynie te do których wszystkie parametry razem wzięte pasują. czyli przykładowo baza zawiera: 1. Mercedes E320 - kolor: czarny, lakier: metalic, rodzaj paliwa: benzyna 2. Ford Mondeo - kolor: zielony, lakier: metalic, rodzaj paliwa: lpg 3. Opel Vectra - kolor: zielony, lakier: metalic, rodzaj paliwa: lpg Wynik powinien pokazać 2 i 3 rekord, a nie wszystkie... Próbowałem połączyć to zapytaniem z IN w warunku ale pokazuje wszystkie 3, z kolei jeśli chciałem wydzielić tylko i wyłącznie 2 rekordy odwołując się i dodając tabele z różnymi aliasami zapytanie zamula przy większej ilości danych... Zapytanie co działa dobrze, ale wolno i jest nieeleganckie:
A oto zapytanie co działa szybko ale pokazuje za wiele:
Kilka słów o bazie: products - tabela z produktami PRD_Name - to nazwa produktu PRD_Id - to id produktu productsparametr - tabela z parametrami o produktach PRV_Id - Id atrybutu (może sie potarzać w bazie) PRD_Id - Id produktu do którego odwołuje sie ten parametr Czy wie ktoś jak rozwiązać ten problem łatwo i bez nadmiernego chaosu? Chyba się nie da tego inaczej zrobić niż na połączonych tabelach - będe obserwować ten temat - może ktoś wpadnie na ciekawy pomysł (IMG:style_emoticons/default/smile.gif) Ten post edytował sniver 8.05.2010, 13:51:12 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 7.10.2025 - 14:45 |