Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: jak sformulowac zapytanie :/
Forum PHP.pl > Forum > Bazy danych > MySQL
ergo
mam tabelke:
produkt | cecha | parametr

przykladowo:

37 1 78
37 17 42
37 17 74
37 15 39

(dla jakiegostam produktu iles cech zapisanych )

i chcialbym z niej pobrac id produktow ktore maja np.

cecha=5 i parametr dla tej cechy parametr=6
jako ze maja kilka cech przypisanych typu producent, zasilanie itp.
to jeszcze rownoczesnie chce pobrac produkty danego producenta o okreslonej cesze

wiec chcialbym zeby mi wybralo id produktow dla cechy producent ( np.1 ) o parametrze firma
czyli
  1. WHERE cecha=1 AND parametr=55

ale rownoczesnie chce zeby to byly elementy montowane sciennie czyli
czyli
  1. WHERE cecha=17 AND parametr=42

nie moge napisac wiec :
  1. WHERE cecha=1 AND parametr=55 AND cecha=17 AND parametr=42

bo to jest sprzeczne zapytanie, zna ktos rozawiazanie tego problemu ( mam wrazenie ze to cos prostego co mi umknelo )
sobstel
  1. WHERE (cecha=1 AND parametr=55) OR (cecha=17 AND parametr=42)
ergo
nie wlasnie ze to nie jest takie proste bo to zapytanie mi znajdzie produkty jednego producenta i produkty ktore sie montuje na scianie. Klopot w tym ze te ktore sie montuja na scianie moga byc roiznych producentow ;-)
wiec dostaniemy zestaw wynikow zupelnie inny niz bysmy sie spodziewali

ja potrzebuje wlasnie przykladowo scienne i jednej firmy.
spenalzo
Moim zdaniem jest to troche źle zaprojektowana baza......
Po co "producent" jest cechą skoro każdy produkt ma (bo musi) mieć producenta? W taki sposób jak to masz to tylko utrudniasz sobie życie.

Według mnie, producent jest taka cechą jak nazwa - powinieneś mieć oddzielną kolumnę dla producenta, choćby z tego powodu, żeby wyeliminować problemy takie jak ten. A jeżeli np. dany produkt ma 2 lub wiecej producentów to nic nie stoi na przeszkodzie, żeby wrzucić do takiej kolumny 2 lub wiecej wartości rozdzielonych przecinakimi a potem szukać przy użyciu find_in_set.
sobstel
Cytat(spenalzo @ 2006-03-09 17:54:20)
Według mnie, producent jest taka cechą jak nazwa - powinieneś mieć oddzielną kolumnę dla producenta, choćby z tego powodu, żeby wyeliminować problemy takie jak ten. A jeżeli np. dany produkt ma 2 lub wiecej producentów to nic nie stoi na przeszkodzie, żeby wrzucić do takiej kolumny 2 lub wiecej wartości rozdzielonych przecinakimi a potem szukać przy użyciu find_in_set.

wiecej, ja bym sie skłaniał do kolejnych 3 kroków normalizacji. find_in_set najwydajniejszych rozwiazaniem raczej nie jest...
spenalzo
Nie jest, ale z doświadczenia wiem, że produktów ktore mają wiecej niż 1 producenta w skali całego sklepu/katalogu produktów jest naprawde niedużo, i czasami nie ma sensu rozbijać tego na dodatkową tabelę...
Poza tym to był tylko przykład ; P
Vogel
jesli sie trafia to sie producenta laczy z produktem na zasadzie wieleDOwielu. i po klopocie.
ergo
nie ma co rozwazac na temat czy produktow ktore maja kilku producentow jest duzo czy malo, bo np. mam czujniki ktore moga byc scienne, sufitowe czy tez na uchwycie, o ilus rodzajach trybow pracy itp. wiec takich cech o wielu parametrach na raz moze byc wiele. pozatym produkt nie musi miec producenta, produkt nie musi miec okreslonej cechy w danej grupie ( przynajmniej tak to jest zaprojektowane ). z tego co czytalem to wlasnie jest optymalnie zaprojektowana baza ( albo cos zle zrozumialem z normalizacja). tylko nie wiem po prostu jak to wybrac za pomoca jakichs tymczasowych tabel moze ? albo za pomoca operacji na zwroconych elementach macierzy typu najpierw to pobieramy dla producenta a potem wyrzucamy elementy ze zbioru ktore nie posiadaja odpowiednich parametrow ? ( tylko boje sie ze przy duzej ilosci parametrow tudziez sporej ilosci zwroconych elementow to moze byc stosunkowo wolne )
spenalzo
Właśnie widać jak bardzo optymalnie zaprojektowana jest ta baza... rolleyes.gif

Jak chcesz sie dowiedziec jak powinna wygladać taka baza dotycząca produktów z wieloma różnymi cechami użyj szukaczki, było to walkowane kilka razy.
Np. to: http://forum.php.pl/index.php?showtopic=40992
ergo
generalnie chyba nie rozumiesz co ja chce osiagnac, bo tamte posty nijak sie maja do mojego ( zreszta baze mam zaprojektowana praktycznie tak samo ), rozwiaznie z wieloma parametrami w jednym polu oddzielanymi przecinkiem itp, jest zupelnie przeciwne idei baz ;-) ( chociaz wiem ze dziala ), projekt jest dobry , nie wiem tylko jak sformulowac zapytanie ktore by mi to realizowalo. chyba nie przyjrzales sie strukturze
mojej bazy dokladnie ;-) u mnie tabela wiele do wielu jest tabela produkty_cechy.
jak na takim rozawiazaniu (ktore proponowales wyzej) planujesz napisac wydajne zapytanie ktore wybierze Z DANEJ KATEGORII produkty ktore maja 3 producentow, 3 sposoby montowania , i 2 rodzaje elementow swiatloczulych ? ( wszystko rownoczesnie )

jak wymysle jak to ma byc to podam rozwiazanie ;-)
spenalzo
Cytat(ergo @ 2006-03-10 09:17:15)
jak na takim rozawiazaniu (ktore proponowales wyzej) planujesz napisac wydajne zapytanie ktore wybierze Z DANEJ KATEGORII produkty ktore maja 3 producentow, 3 sposoby montowania , i 2 rodzaje elementow swiatloczulych ? ( wszystko rownoczesnie )

Jeżeli mowa o tym moim rozwiązaniu to poprzez warunki w WHERE połączone AND.
ergo
generalnie ja musze miec rozwiazanie ktore obsluguje nieskonczona ilosc mozliwych cech i parametrow dla produktu, w zasadzie mozna by to zrobic za pomoca tabeli tymczasowej ale nie wiem jak potem wyfiltrowac niepotrzebne elementy.

bo moge pobrac bezproblemowo produkty danego producenta, produkty o okreslonych cechach w jednym zapytaniu, ale nie wiem jak zrobic np zapytanie pobierajace produkty spelniajace wszystkie warunki na raz...

no i jest rozwiazanie ( moze nie najpiekniejsze ale zawsze):

jezeli mamy kilka warunkow wyszukiwania to wyszukuje najpierw wszystkie id elementow ktore zawieraja sie w zbioreze ( kategoria=x AND cecha=y AND parametr=z ), to nam juz zwraca zawezona licznbe produktow ( w przypadku sklepu nad ktorym pracuje zwykle nie wiecej niz 10 elementow ale powinno dzialac nawet na duzych ilosciach przedmiotow ), potem z tabeli cech dla kazdego kolejnego warunku wyszukuje kolejna ceche i parametr ale juz w zawezonym zakresie elementow czyli id IN (id z poprzedniej iteracji) AND cecha=x AND parametr=y , i znowu zawezam liste id produktow i tak dla wszystkich zadanych warunkow, ma to moze te wade ze dla kazdego warunku dodaje 1 zapytanie ale za to sa to szybkie operacje tylko na liczbach. a zalete ma te ze dla kazdego produktu mozna zdefiniowac i przypisac nieskonczona ilosc cech
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.