Problem z zapytaniem MySQL
maxio99@gmail.com - 13-11-2006 00:17
Problem z zapytaniem MySQL
Jak sie domyslacie ... mam problem :)
Z zapytaniem do MySQLa ...
Chodzi o wyszukiwarke i ogolnie rzecz biorac o relacje wiele do wielu . Sprawa wyglada tak .
Jest tabela produktow (mz_elementy_2) jest tabela cech(mz_klasyfikacje_2) dla danego produktu .
Element moze miec wiele cech , cechy moga wystepowac w wielu elementach ..
Struktura :
mz_elementy_2 : id_element nazwa_element
mz_klasyfikacje_2: id_klasyfikacje nazwa_klas
i tabela posrednia:
klasyfikacje_elementy id_klasyfikacje id_element
chodzi o zapytanie wyszukujace . Zakladamy ze chce wyszukac wszystkie produkty ktore posiadaja okreslone cechy (klasyfikacje) . Czyli produkty ktore maja takie klasyfikacje (id_klasyfikacje = 7 , id_klasyfikacje = 8 i id_klasyfikacje = 4) .
Gdzies sie zaciolem i nie moge drgnac juz chwile ... bede bardzo wdzieczny :) ...
Filip Rembiałkowski - 13-11-2006 00:17
maxio99@gmail.com napisał(a): > Jak sie domyslacie ... mam problem :) > > Z zapytaniem do MySQLa ... > > Chodzi o wyszukiwarke i ogolnie rzecz biorac o relacje wiele do wielu . > Sprawa wyglada tak . > > Jest tabela produktow (mz_elementy_2) jest tabela > cech(mz_klasyfikacje_2) dla danego produktu . > > Element moze miec wiele cech , cechy moga wystepowac w wielu elementach > . > > Struktura : > > mz_elementy_2 : > id_element > nazwa_element > > mz_klasyfikacje_2: > id_klasyfikacje > nazwa_klas > > i tabela posrednia: > > klasyfikacje_elementy > id_klasyfikacje > id_element > > chodzi o zapytanie wyszukujace . Zakladamy ze chce wyszukac wszystkie > produkty ktore posiadaja okreslone cechy (klasyfikacje) . Czyli > produkty ktore maja takie klasyfikacje (id_klasyfikacje = 7 , > id_klasyfikacje = 8 i id_klasyfikacje = 4) .
select ... FROM ... WHERE ... IN (...)
Paweł Matejski - 13-11-2006 00:17
maxio99@gmail.com wrote: > Jak sie domyslacie ... mam problem :) > > Z zapytaniem do MySQLa ... > > Chodzi o wyszukiwarke i ogolnie rzecz biorac o relacje wiele do wielu . > Sprawa wyglada tak . > > Jest tabela produktow (mz_elementy_2) jest tabela > cech(mz_klasyfikacje_2) dla danego produktu . > > Element moze miec wiele cech , cechy moga wystepowac w wielu elementach > . > > Struktura : > > mz_elementy_2 : > id_element > nazwa_element > > mz_klasyfikacje_2: > id_klasyfikacje > nazwa_klas > > i tabela posrednia: > > klasyfikacje_elementy > id_klasyfikacje > id_element > > chodzi o zapytanie wyszukujace . Zakladamy ze chce wyszukac wszystkie > produkty ktore posiadaja okreslone cechy (klasyfikacje) . Czyli > produkty ktore maja takie klasyfikacje (id_klasyfikacje = 7 , > id_klasyfikacje = 8 i id_klasyfikacje = 4) . > > Gdzies sie zaciolem i nie moge drgnac juz chwile ... bede bardzo > wdzieczny :) ...
Zliczaj ilość klasyfikacji pasujące do warunku. Wiele razy tu pisałem, jak się takie problemy rozwiązuje.
-- P.M.
maxio99@gmail.com - 13-11-2006 00:17
Filip Rembiałkowski napisał(a): > maxio99@gmail.com napisał(a): > > Jak sie domyslacie ... mam problem :) > > > > Z zapytaniem do MySQLa ... > > > > Chodzi o wyszukiwarke i ogolnie rzecz biorac o relacje wiele do wielu . > > Sprawa wyglada tak . > > > > Jest tabela produktow (mz_elementy_2) jest tabela > > cech(mz_klasyfikacje_2) dla danego produktu . > > > > Element moze miec wiele cech , cechy moga wystepowac w wielu elementach > > . > > > > Struktura : > > > > mz_elementy_2 : > > id_element > > nazwa_element > > > > mz_klasyfikacje_2: > > id_klasyfikacje > > nazwa_klas > > > > i tabela posrednia: > > > > klasyfikacje_elementy > > id_klasyfikacje > > id_element > > > > chodzi o zapytanie wyszukujace . Zakladamy ze chce wyszukac wszystkie > > produkty ktore posiadaja okreslone cechy (klasyfikacje) . Czyli > > produkty ktore maja takie klasyfikacje (id_klasyfikacje = 7 , > > id_klasyfikacje = 8 i id_klasyfikacje = 4) . > > select ... FROM ... WHERE ... IN (...)
Jasne ;) ....
Nie to nie tedy droga twoja droga przy zwiekszaniu warunkow bedzie mi zwiekszal ilosc wyswietlonych elementow . TO bedzie dzialalo jakbym napisal OR OR OR .... a tu ma byc AND AND AND tylko ze tak nie da rady :)
maxio99@gmail.com - 13-11-2006 00:17
Paweł Matejski napisał(a): > maxio99@gmail.com wrote: > > Jak sie domyslacie ... mam problem :) > > > > Z zapytaniem do MySQLa ... > > > > Chodzi o wyszukiwarke i ogolnie rzecz biorac o relacje wiele do wielu . > > Sprawa wyglada tak . > > > > Jest tabela produktow (mz_elementy_2) jest tabela > > cech(mz_klasyfikacje_2) dla danego produktu . > > > > Element moze miec wiele cech , cechy moga wystepowac w wielu elementach > > . > > > > Struktura : > > > > mz_elementy_2 : > > id_element > > nazwa_element > > > > mz_klasyfikacje_2: > > id_klasyfikacje > > nazwa_klas > > > > i tabela posrednia: > > > > klasyfikacje_elementy > > id_klasyfikacje > > id_element > > > > chodzi o zapytanie wyszukujace . Zakladamy ze chce wyszukac wszystkie > > produkty ktore posiadaja okreslone cechy (klasyfikacje) . Czyli > > produkty ktore maja takie klasyfikacje (id_klasyfikacje = 7 , > > id_klasyfikacje = 8 i id_klasyfikacje = 4) . > > > > Gdzies sie zaciolem i nie moge drgnac juz chwile ... bede bardzo > > wdzieczny :) ... > > Zliczaj ilość klasyfikacji pasujące do warunku. Wiele razy tu pisałem, jak się > takie problemy rozwiązuje. > > -- > P.M.
Jakbyś mógł podac linka albo najlepiek walnac szybko taki schemat zapytania ... tylko nie w stylu IN lub OR (tak jak kolega wyzej bo to nie tedy droga) czy jak ktos mi gdzies podal ze wystarczy spiac tabelki JOINem bez podawania warunkow :)
Paweł Matejski - 13-11-2006 00:17
maxio99@gmail.com wrote: > Paweł Matejski napisał(a): >> maxio99@gmail.com wrote: >>> >>> chodzi o zapytanie wyszukujace . Zakladamy ze chce wyszukac wszystkie >>> produkty ktore posiadaja okreslone cechy (klasyfikacje) . Czyli >>> produkty ktore maja takie klasyfikacje (id_klasyfikacje = 7 , >>> id_klasyfikacje = 8 i id_klasyfikacje = 4) . >>> >>> Gdzies sie zaciolem i nie moge drgnac juz chwile ... bede bardzo >>> wdzieczny :) ... >> Zliczaj ilość klasyfikacji pasujące do warunku. Wiele razy tu pisałem, jak się >> takie problemy rozwiązuje. > > Jakbyś mógł podac linka albo najlepiek walnac szybko taki schemat > zapytania ... tylko nie w stylu IN lub OR (tak jak kolega wyzej bo to > nie tedy droga) czy jak ktos mi gdzies podal ze wystarczy spiac tabelki > JOINem bez podawania warunkow :)
Jak to mówią "open your maind". Kolega dobrze Ci radzi, teraz doprowadź wynik do strawnej postaci.
-- P.M.
maxio99@gmail.com - 13-11-2006 00:17
Paweł Matejski napisał(a): > maxio99@gmail.com wrote: > > Paweł Matejski napisał(a): > >> maxio99@gmail.com wrote: > >>> > >>> chodzi o zapytanie wyszukujace . Zakladamy ze chce wyszukac wszystkie > >>> produkty ktore posiadaja okreslone cechy (klasyfikacje) . Czyli > >>> produkty ktore maja takie klasyfikacje (id_klasyfikacje = 7 , > >>> id_klasyfikacje = 8 i id_klasyfikacje = 4) . > >>> > >>> Gdzies sie zaciolem i nie moge drgnac juz chwile ... bede bardzo > >>> wdzieczny :) ... > >> Zliczaj ilość klasyfikacji pasujące do warunku. Wiele razy tu pisałem, jak się > >> takie problemy rozwiązuje. > > > > Jakbyś mógł podac linka albo najlepiek walnac szybko taki schemat > > zapytania ... tylko nie w stylu IN lub OR (tak jak kolega wyzej bo to > > nie tedy droga) czy jak ktos mi gdzies podal ze wystarczy spiac tabelki > > JOINem bez podawania warunkow :) > > Jak to mówią "open your maind". Kolega dobrze Ci radzi, teraz doprowadź wynik do > strawnej postaci. > > -- > P.M.
Kolega źle mi radzi . Chyba nawet nie przeczytal o co mi chodzi :) ...
To ma dzialac jak klasyczna wyszukiwarka . Czym wiecej podanych opcji tym mniej wynikow wypluwa ...
A w przypadku IN czy OR (i nie mów mi o tym że musze spiac te tabele bo jestem tego świadom ale tu nie o to chodzi) to dziala dokladnie odwrotnie. Bo czym zwieksze ilosc opcji do wyboru (wprowadzajac nowe pozycje do klauzli IN czy nowe OR) to bede uzyskiwal wiecej wynikow a nie mniej . No to chyba dla kazdego kto chodz troche zna sie na bazach jest oczywiste ...
OPEN my MAIND :) Ja go od wczoraj mam najszerzej otwarty jak sie da . TO z IN czy OR nie dziala AND jak sie domyslasz nie ma prawa dzialac . IN czy OR zadziala dokladnie w odwrotny sposob do jakiego ja potrzebuje .... a AND nie moge uzyc ( :) )... myslalem zeby dzialac na aliasach ... poprostu zeby operowac na kilku tabelach laczacych naraz (kl_el2,kl_el3 ...) i wtedy porownywac ze soba te wyniki ale to bedzie jakies takie nie eleganckie .... pozatym strach sie bac bo moge miec kilkadziesiat klasyfikacji wiec jak moje zapytanie bedzie wygladalo :\
Paweł Matejski - 13-11-2006 00:18
maxio99@gmail.com wrote: > Paweł Matejski napisał(a): >> maxio99@gmail.com wrote: >>> Paweł Matejski napisał(a): >>>> maxio99@gmail.com wrote: >>>>> chodzi o zapytanie wyszukujace . Zakladamy ze chce wyszukac wszystkie >>>>> produkty ktore posiadaja okreslone cechy (klasyfikacje) . Czyli >>>>> produkty ktore maja takie klasyfikacje (id_klasyfikacje = 7 , >>>>> id_klasyfikacje = 8 i id_klasyfikacje = 4) . >>>>> >>>>> Gdzies sie zaciolem i nie moge drgnac juz chwile ... bede bardzo >>>>> wdzieczny :) ... >>>> Zliczaj ilość klasyfikacji pasujące do warunku. Wiele razy tu pisałem, jak się >>>> takie problemy rozwiązuje. >>> Jakbyś mógł podac linka albo najlepiek walnac szybko taki schemat >>> zapytania ... tylko nie w stylu IN lub OR (tak jak kolega wyzej bo to >>> nie tedy droga) czy jak ktos mi gdzies podal ze wystarczy spiac tabelki >>> JOINem bez podawania warunkow :) >> Jak to mówią "open your maind". Kolega dobrze Ci radzi, teraz doprowadź wynik do >> strawnej postaci. >> >> -- >> P.M. > > Kolega źle mi radzi . Chyba nawet nie przeczytal o co mi chodzi :) ... > > To ma dzialac jak klasyczna wyszukiwarka . Czym wiecej podanych opcji > tym mniej wynikow wypluwa ... > > A w przypadku IN czy OR (i nie mów mi o tym że musze spiac te tabele > bo jestem tego świadom ale tu nie o to chodzi) to dziala dokladnie > odwrotnie. Bo czym zwieksze ilosc opcji do wyboru (wprowadzajac nowe > pozycje do klauzli IN czy nowe OR) to bede uzyskiwal wiecej wynikow a > nie mniej . No to chyba dla kazdego kto chodz troche zna sie na bazach > jest oczywiste ... > > OPEN my MAIND :) Ja go od wczoraj mam najszerzej otwarty jak sie da . > TO z IN czy OR nie dziala AND jak sie domyslasz nie ma prawa dzialac . > IN czy OR zadziala dokladnie w odwrotny sposob do jakiego ja potrzebuje
Ten akapit wcześniej to właśnie dowód na to, że myślisz schematami, mimo, że masz malutkie doświadczenie w SQL'u.
select t.kol2,t.kol2,.... from tabela t where id_cechy in (id1,id2,id3) group by t.kol2,t.kol2,.... having count(*) = 3
-- P.M.
Filip Rembiałkowski - 13-11-2006 00:43
maxio99@gmail.com napisał(a):
> Kolega źle mi radzi . Chyba nawet nie przeczytal o co mi chodzi :) ... > przeczytałem to co napisałeś. taki mam zwyczaj żeby czytać zanim odpowiem.
cytuję:
> Struktura : > > mz_elementy_2 : > id_element > nazwa_element > > mz_klasyfikacje_2: > id_klasyfikacje > nazwa_klas > > i tabela posrednia: > > klasyfikacje_elementy > id_klasyfikacje > id_element > > chodzi o zapytanie wyszukujace . Zakladamy ze chce wyszukac wszystkie > produkty ktore posiadaja okreslone cechy (klasyfikacje) . Czyli > produkty ktore maja takie klasyfikacje (id_klasyfikacje = 7 , > id_klasyfikacje = 8 i id_klasyfikacje = 4) .
to da się zrobić dokładnie tak jak napisałem. podałem wersję szkicową żeby skłonić cie do myslenia ale widze że bez skutku niestety
select nazwa_element FROM mz_elementy_2 WHERE id_element IN ( SELECT id_element FROM klasyfikacje_elementy WHERE id_klasyfikacje IN (7, 8, 4) )
być może źle opisałeś problem, ale nie każ nam tu zgadywać jak działa twoja wyszukiwarka!
F.
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
[mysql] =?ISO-8859-2?Q?Za=E6mienie=2E=2E=2E_jak_wy=B6wietli=E6?==?ISO-8859-2?Q?=2E=2E=2E?=
[mysql] =?ISO-8859-2?Q?wielko=B6=E6_bazy_a_stabilno=B6=E6=2C?==?ISO-8859-2?Q?_podzia=B3_du=BFej_bazy_a_powi=B1zania_tabel?=
[MySQL] =?ISO-8859-2?Q?Wy=B6wietlenie_kolejnej_pozycji=2C_?==?ISO-8859-2?Q?jak=B1_mia=B3by_dany_rekord=2C_gdybym_czyta=B3 _?==?ISO-8859-2?Q?wg_konkretnych_kryteri=F3w=2E_Da_si=EA_=3F?=
[mysql 4.0.x] przenoszenie kolum =?ISO-8859-2?Q?mi=EAdzy_bazam?==?ISO-8859-2?Q?i_cd_=2E=2E=2E_?=
[MySQL] =?ISO-8859-2?Q?z=B3=B1czenie_tabeli_u=BFytkownik_i?==?ISO-8859-2?Q?_zdj=EAcia_z_wyborem_zdj=EAcia_domy=B6lnego?=
[MySQL] Jak =?ISO-8859-2?Q?wpisa=E6_do_tabeli_pozycje_dl?==?ISO-8859-2?Q?a_wierszy_gdybym_te_wiersze_wybiera=B3_w_ok?== ?ISO-8859-2?Q?re=B6lonej_kolejno=B6ci_=3F?=
Gdzie MySQL 4.1, a gdzie 5.0?
[MySQL 4.0...4.1] zabezpieczenie przed =?ISO-8859-2?Q?jednoczesn?==?ISO-8859-2?Q?=B1_edycj=B1?=
[MS SQL] "set names" (mySQL) w MS SQL
MySQL - jak =?ISO-8859-2?Q?wyeksportowa=E6_zawarto=B6=E6_wie?==?ISO-8859-2?Q?lkiej_tabeli?=
zanotowane.pldoc.pisz.plpdf.pisz.pllatwa-kasiora.pev.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 |
|