Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Projekt tabel(i) cache dla sklepu, cechy produktów
athabus
post
Post #1





Grupa: Zarejestrowani
Postów: 898
Pomógł: 48
Dołączył: 2.11.2005
Skąd: Poznań

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


Witam,

chciałbym w sklepie internetowym wprowadzić nawigację po cechach, która jest obecnie stosowana w wielu sklepach np. cyfrowe.pl rtveuroagd itp.

W skrócie chodzi mi o coś takiego, że klient po wejściu w kategorię produktów typu telewizory może za pomocą filtrów wyszukać te np. o przekątnej 15" i cenie od 2 do 3000 itd.

Macie wiedzę/pomysł jak to zrobić optymalnie?

Na wstępie myślałem o takiej tabeli:

(FK)id_produktu | (FK)id_cechy | wartość cechy

Problem jaki napotykam, to jak wyciągnąć z tej tabeli produkty spełniające np. 3 warunki (dla każdego produktu będzie tyle rekordów ile jest przypisanych do niego cech - w sumie nawet więcej bo niektóre cechy są wielokrotnego wyboru). Czy np. jeśli klient sobie zażyczy telewizor zdefiniowany cechami 32", czarny, Sony, do 5000zł to należy wykonać odpowiednio 4 zapytania - najpierw poszukać wszystkie telewizory 32" z nich wszystkie czarne, z nich te marki Sony itd? Czy może taki problem da się rozwiązać jakoś w miarę elegancko?

Niby problem banalny, ale mam jakieś zaćmienie i nie mogę wymyślić jak to rozwiązać lepiej niż to co opisałem wyżej.

Pozdrawiam i dzięki za pomoc.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




@melkorm tak, left joiny. Tyle ile szukasz cech, tyle musisz dać leftjoinów. Nie możesz dać ANDów od tak sobie jak piszesz bo nie zakumałeś problemu (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
sazian
post
Post #3





Grupa: Zarejestrowani
Postów: 1 045
Pomógł: 141
Dołączył: 19.09.2006
Skąd: B-tów

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


Cytat(nospor @ 29.10.2012, 15:49:51 ) *
@melkorm tak, left joiny. Tyle ile szukasz cech, tyle musisz dać leftjoinów. Nie możesz dać ANDów od tak sobie jak piszesz bo nie zakumałeś problemu (IMG:style_emoticons/default/wink.gif)


jeśli dobrze zrozumiałem to chcesz zrobić coś takiego
  1. SELECT ...
  2. FROM towary
  3. LEFT JOIN cechy c1 ON ... c1.cechaId=1
  4. LEFT JOIN cechy c2 ON ... c2.cechaId=2
  5. WHERE c1.wartość=1 AND c2.wartość=10


dobrze zrozumiałem (IMG:style_emoticons/default/questionmark.gif)
jeśli tak to ja bym to zrobił inaczej

  1. SELECT t.*
  2. FROM towary t
  3. LEFT JOIN cechy c ON c.towarId=t.towarId
  4. WHERE (c.cechaId= 1 AND c.cechaWartość=1) AND (c.cechaId= 2 AND c.cechaWartość=10)
  5. GROUP BY t.towarId

działa sprawdzone (IMG:style_emoticons/default/wink.gif) i tylko jeden left join
Go to the top of the page
+Quote Post

Posty w temacie


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: 7.10.2025 - 07:41