Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [mysql] filtrowanie po cechach w sklepie
Forum PHP.pl > Forum > Bazy danych > MySQL
Karen
Witam,
Od kilku dni siedzę nad cechami produktów w sklepie, ale obawiam się, że mnie to pokonało...

Mam tabelę cechy (cechy_id | cechy_produktid | cechy_katid | cechy_wartid), cechy_kat ( id | kat_nazwa), cechy_wartosci ( id | wartosc )
W samym sklepie elegancko już wypisuje mi wszystkie cechy (ich kategorie i wartości) na podstawie listy produktów.
Postuję sobie te checkboxy jako tabele:
  1. name="cechy[o'.$q["cechy_katid"].'][]" value="'.$q["cechy_wartid"].'"

Czyli dostaję kategorie cech z ich wartościami.

Załóżmy, że tak to wygląda:
Dodatkowe funkcje:
Port SFP
Port Gigabit
Ilość portów 1000Mbit:
1
2

Jak podejść teraz do zapytania żeby opcje w obrębie jednej kategorii traktował jako OR (ilość portów 1 lub 2), a w różnych kategoriach jako AND (dodatkowo musi mieć port gigabit)?
Możliwe też, że po prostu się do tego źle zabieram...
Poradzicie coś? smile.gif
kapslokk
  1. JOIN cechy AS cechy_1 ON cechy_1.katid = 1 && ( cechy_1.wartid = 1 || cechy_1.wartid = 2)
  2. JOIN cechy AS cechy_2 ON cechy_2.katid = 2 && ( cechy_2.wartid = 3 || cechy_2.wartid = 4)

Dodatkowo do każdego joina musisz dorzucic pole po którym bedziesz to wiązał, czyli produktid
Karen
Tyle, że jeśli np mam 10 kategorii z cechami to muszę robić 10 joinów (zakładając, że w każdej coś zostało zaznaczone). Nie ma innego, jakiegoś sprytnego, sposobu na to?
kapslokk
Może i jest, ja innego nie znam tongue.gif W każdym razie przecież nie będziesz pisał tych joinów ręcznie, tylko skrypt je wygeneruje, więc co to za różnica czy jeden czy 10? smile.gif

@edit
Teoretycznie powinno też zadziałać
  1. JOIN cechy ON (cechy.katid = 1 && ( cechy.wartid = 1 || cechy.wartid = 2)) && (cechy.katid = 2 && ( cechy.wartid = 3 || cechy.wartid = 4))

Ale to imo strasznie brzydko wygląda. Nie wiem jak z wydajnością smile.gif potestuj
Karen
Tych cech i kategorii jest całkiem sporo, a samych produktów w sklepie naście tysięcy. sad.gif Problem może być z wydajnością.
Niemniej jednak dzięki za sugestię. smile.gif
kapslokk
Jak porobisz indeksy, klucze itd to będzie działało smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.