Jak wykonać takie zapytanie
TPI - 26-04-2006 01:21
Jak wykonać takie zapytanie
Witam.
Posiadam w bazie danych MySQL tabelę "produkty" w której zdefiniowane są cechy produktów. Cech dla każdego produktu może być teoretycnie nieograniczona. Obecnie każdy produkt posiada ich kilkanaście. Tabela wygląda mniej więcej tak:
id_produktu | id_cechy | wartosc_cechy
Chcę jako wynik wyszukiwania dostac listę produktów o określonej grupie cech np: zielone kwadrady - będa miały id_cechy="ksztalt", wartosc_cechy="kwadrat" oraz id_cechy="kolor", wartosc_cechy="zielony" itd.
jeżeli chcę wyszukać wszystkie produkty zielone, zadaję pytanie: SELECT id_produktu from produkty where id_cechy="kolor" and wartosc_cechy="zielony"
to wszystko jest o.k.
jeżeli chcę wyszukać wszystkie produkty zielone oraz wszystkie kwadraty, zadaję pytanie:
SELECT id_produktu from produkty where (id_cechy="kolor" and wartosc_cechy="zielony") OR (id_cechy="ksztalt" and wartosc_cechy="kwadrat") to też wszystko jest o.k.
Problem zaczyna się wtedy, gdy chcę wyszukać wszystkie np: zielone kwadraty. Jeżeli zadam pytanie SELECT id_produktu from produkty where (id_cechy="kolor" and wartosc_cechy="zielony") AND (id_cechy="ksztalt" and wartosc_cechy="kwadrat") to w wynikach wyszukiwania nic nie dostaję.
Proszę o pomoc.
Paweł
Grzegorz Szyszlo - 26-04-2006 01:21
TPI wrote: > Witam. > > Posiadam w bazie danych MySQL tabelę "produkty" w której zdefiniowane są > cechy produktów. Cech dla każdego produktu może być teoretycnie > nieograniczona. Obecnie każdy produkt posiada ich kilkanaście. Tabela > wygląda mniej więcej tak: > > id_produktu | id_cechy | wartosc_cechy > > Chcę jako wynik wyszukiwania dostac listę produktów o określonej grupie cech > np: > zielone kwadrady - będa miały id_cechy="ksztalt", wartosc_cechy="kwadrat" > oraz id_cechy="kolor", wartosc_cechy="zielony" itd. > > jeżeli chcę wyszukać wszystkie produkty zielone, zadaję pytanie: > SELECT id_produktu from produkty where id_cechy="kolor" and > wartosc_cechy="zielony" > > to wszystko jest o.k. > > jeżeli chcę wyszukać wszystkie produkty zielone oraz wszystkie kwadraty, > zadaję pytanie: > > SELECT id_produktu from produkty where (id_cechy="kolor" and > wartosc_cechy="zielony") OR (id_cechy="ksztalt" and wartosc_cechy="kwadrat") > to też wszystko jest o.k. > > Problem zaczyna się wtedy, gdy chcę wyszukać wszystkie np: zielone kwadraty. > Jeżeli zadam pytanie > SELECT id_produktu from produkty where (id_cechy="kolor" and > wartosc_cechy="zielony") AND (id_cechy="ksztalt" and > wartosc_cechy="kwadrat") > to w wynikach wyszukiwania nic nie dostaję.
czy ty aby na pewno dobrze te tabelki skonstruowales? zauwaz ze warunek where zawsze odnosi sie do tego jednego, wlasnie wybranego wiersza danych, i ten wiersz podlega filtrowaniu. teraz pytanie za 100 punktow. czy w jednym wierszu, kolumna id_cechy moze miec jednoczesnie wartosci 'kolor' oraz 'ksztalt' ? pytanie pomocnicze. czy kolumna wartosc_cechy w jednym elementarnym wierszu tabeli moze miec jednoczesnie wartosci 'zielony' oraz 'kwadrat' ?
to sa pytania do rozwazenia na poczatek. zastanow sie tez czym tak naprawde ma byc id_produktu . czy to sam numeryczny identyfikator a podstawowe cechy produktu masz opisane w innej tabeli, czy jak?
podpowiedz. jesli chcesz pytac o rozne kombinacje cech i wartosci aby uzyskac szukana liste id_produktu , jedynym wyjsciem jest wielokrotny join. jesli szukasz 2ch par cech, bedzie to 1 join, jesli 3ch to 2 joiny i tak dalej.
znik.
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
Oracle, SQL, PL/SQL. Jak =?ISO-8859-2?Q?napisa=E6_zapytanie=2C?==?ISO-8859-2?Q?_kt=F3re_zwr=F3ci_nazw=EA_atrybutu=2C_kt=F3reg o?==?ISO-8859-2?Q?_warto=B6ci_spe=B3niaj=B1_zadany_warunek?=
=?ISO-8859-2?Q?Narz=EAdzie_do_budowania_zapyta=F1_SQL=2C?==?I SO-8859-2?Q?_PL/PgSQL=2C_PL/SQL=2C_T-SQL?=
[ms sql] =?ISO-8859-2?Q?wy=B6wietlenie_pierwszych_5_rekord?==?ISO-8859-2?Q?=F3w_z_zapytania_=3F_odpowiednik_ROWNUM_w_o?== ?ISO-8859-2?Q?raclu_dla_MS_SQL=27a?=
phpMyAdmin zadaje =?ISO-8859-2?Q?z=B3e_zapytania=2E=2E=2E_Dl?==?ISO-8859-2?Q?aczego=3F?=
[MSSQL2000] Problem z =?ISO-8859-2?Q?tabel=B1/indeksem/zapytanie?==?ISO-8859-2?Q?m_czy_b=B3=B1d_w_bazie_danych=2E=2E=2E?=
[mysql 5.x] jak =?ISO-8859-2?Q?zrealizowa=E6_zapytanie=3F_cz?==?ISO-8859-2?Q?yli_podzapytanie_i_wi=EAcej_ni=BF_jeden_rz=B1? ==?ISO-8859-2?Q?d_wynik=F3w?=
[oracle] zapytanie dynamiczne z =?ISO-8859-2?Q?=22dynamiczn=B1_?==?ISO-8859-2?Q?nazw=B1_tabeli=22?=
[mysql/php] jak =?ISO-8859-2?Q?zliczy=E6_ilo=B6=E6_unikalnyc?==?ISO-8859-2?Q?h_rekord=F3w_w_jednym_zapytaniu=3F?=
[MySQL] Zapytanie z =?ISO-8859-2?Q?dw=F3ch_tabel_na_raz_?==?ISO-8859-2?Q?i_grupowanie_po_wsp=F3lnym_polu=2E_Jak_=3F?=
mecze sie i mecze i nic - zapytanie czesciowe
zanotowane.pldoc.pisz.plpdf.pisz.plnawschodzie.xlx.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|