Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [mysql] filtrowanie po cechach w sklepie
Karen
post
Post #1





Grupa: Zarejestrowani
Postów: 39
Pomógł: 1
Dołączył: 23.10.2006

Ostrzeżenie: (0%)
-----


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ś? (IMG:style_emoticons/default/smile.gif)

Ten post edytował Karen 26.01.2016, 13:21:49
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
kapslokk
post
Post #2





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


  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
Go to the top of the page
+Quote Post
Karen
post
Post #3





Grupa: Zarejestrowani
Postów: 39
Pomógł: 1
Dołączył: 23.10.2006

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
kapslokk
post
Post #4





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Może i jest, ja innego nie znam (IMG:style_emoticons/default/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? (IMG:style_emoticons/default/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ą (IMG:style_emoticons/default/smile.gif) potestuj

Ten post edytował kapslokk 26.01.2016, 13:52:23
Go to the top of the page
+Quote Post
Karen
post
Post #5





Grupa: Zarejestrowani
Postów: 39
Pomógł: 1
Dołączył: 23.10.2006

Ostrzeżenie: (0%)
-----


Tych cech i kategorii jest całkiem sporo, a samych produktów w sklepie naście tysięcy. (IMG:style_emoticons/default/sad.gif) Problem może być z wydajnością.
Niemniej jednak dzięki za sugestię. (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
kapslokk
post
Post #6





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Jak porobisz indeksy, klucze itd to będzie działało (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 22:46