Re: [mysql] select z kilku tabel
Paweł Matejski - 30-07-2006 00:44
Mitis wrote: > Witam, > > Teoretycznie; produkt { > id > nazwa > } > produkt_parametr { > id_produkt > id_kategoria > id_cena > } > kategoria { > id > nazwa > } > cena { > id > wartosc > } > > zapytujac jednym pytaniem o nazwe produktu, kategorie produktu i cene np > tak: > SELECT id,nazwa, > (SELECT nazwa FROM kategoria WHERE id= > (SELECT id_kategoria FROM produkt_parametr WHERE > id_produkt=produkty.id) > ) as pkategoria, > (SELECT wartosc FROM cena WHERE id= > (SELECT id_cena FROM produkt_parametr WHERE id_produkt=produkty.id) > ) as pcena > FROM produkty
O rany....
> Osiagne "podane wszystko na tacy" ale czy nie bedzie to przy duzej > ilosci produktow (ponad 10,000) wolniejsze
Na tacy?!
> od np. 2 czy 3 osobnych zapytan + polaczenie tego potem aplikacja ? > Oryginalnie tabela produkt ma 12 kolumn i tabela produkt_parametr ma 9, > z tego co wiem nalezy unikac tabel z duza ilosc kolumn, stad podzielilem > produkt na dwie. Wyszukiwanie odbywac sie bedzie po parametrach czyli po > samych ID.
Taka optymalizacja to ma znaczenie przy duuuużych bazach, bo zyskujesz procenty czasu zapytania. Powyższym zapytaniem tracisz dużo więcej.
> Przy okazji mam pytanie 2. Czy ma sens w tabeli produkt_parametr > definiowani wszystkich kolumn id_XXXXXX jako indeksy ?
To zależy od zapytań.
Podsumowując - zapomnij o optymalizacji. Weź jakąś książkę, tutorial, czy cokolwiek i naucz się podstaw SQL'a. I nie kombinuj. A Twoja baza będzie działała wystarczająco szybko.
-- P.M.
Dawid Kloch - 30-07-2006 00:44
> > Podsumowując - zapomnij o optymalizacji. Weź jakąś książkę, tutorial, > czy cokolwiek i naucz się podstaw SQL'a. I nie kombinuj. A Twoja baza > będzie działała wystarczająco szybko. >
Może i starsze wersje mysql były ubogie ale takich cyrków się jednak nie dało zrobić ;)
JOIN JOIN JOIN !!!
pozdrawiam Dawid
Mitis - 30-07-2006 00:45
Aaye Dawid,
>> Podsumowując - zapomnij o optymalizacji. Weź jakąś książkę, tutorial, >> czy cokolwiek i naucz się podstaw SQL'a. I nie kombinuj. A Twoja baza >> będzie działała wystarczająco szybko. >> > Może i starsze wersje mysql były ubogie ale takich cyrków się jednak > nie dało zrobić ;) > > JOIN JOIN JOIN !!!
no tak myslalem ze troche "za daleko" zaszedlem ;)
Mysle nad JOIN ale jakos nie moge tego skontruowac, poniewaz tu sa 3 tabele w to wszystko zamieszane. Manual od mysql+strony mysql.org mam juz prawie w autostarcie bo wisi na pasku od 3 dni, jednak doczytac cos a przelozyc to na praktyke to 2 rozne zeczy... Prosze zyczliwych o przyklad: Jak zapytac o produkt i katergorie jednoczesnie uzywajac JOIN ? Jak posortowac produkty po cenie ?
Pozdrawiam Bartek
> > pozdrawiam > Dawid
Przemyslaw Popielarski - 30-07-2006 00:45
Mitis wrote: > Mysle nad JOIN ale jakos nie moge tego skontruowac, poniewaz tu sa 3 > tabele w to wszystko zamieszane.
select * from produkt p inner join produkt_parametr pp on p.id=pp.id_produkt inner join kategoria k on pp.id_kategoria=k.id inner join cena c on pp.id_cena=c.id
-- ../ premax ../ premax@hot.pl ../ koniec i bomba, a kto czytal ten traba. w.g.
Mitis - 30-07-2006 00:45
Aaye Mitis,
> Aaye Dawid, >> >> JOIN JOIN JOIN !!! >> > no tak myslalem ze troche "za daleko" zaszedlem ;) > > Mysle nad JOIN ale jakos nie moge tego skontruowac, poniewaz tu sa 3 > tabele > w to wszystko zamieszane. Manual od mysql+strony mysql.org mam juz > prawie > w autostarcie bo wisi na pasku od 3 dni, jednak doczytac cos a > przelozyc > to na praktyke to 2 rozne zeczy... > Prosze zyczliwych o przyklad: Jak zapytac o produkt i katergorie > jednoczesnie > uzywajac JOIN ? Jak posortowac produkty po cenie ?
Juz mam, join (no jest duzo duzo czytelniejsze :D), ale mam pytanie, join laczy tabele, czy mozna zmusic ta instrukcje aby dolaczyla tylko czesc kolumn tabeli, np. kategoria ma pole ID ktore mi nie jest kompletnie potrzebne, pytam, bo jak wspomnialem tabele maja dosc duzo kolumn ?
Pozdr Bartek
Mitis - 30-07-2006 00:45
Aaye Mitis,
Poradzilem sobie, dziekuje wszystim za slowa krytyki (ktore mi sie niewatpliwie nalezaly) i za pomoc.
Pozdr Bartek
ps. zamiast select-masakrator mam teraz (juz oryginalnie), wlaczajac sortowanie ;)
SELECT p.*, pp.*, c.name as cname FROM products as p, products_params as pp, category as c WHERE p.id=pp.id_product AND c.id=pp.id_category order by cname desc
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?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?=
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 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?=
MySQL - jak =?ISO-8859-2?Q?wyeksportowa=E6_zawarto=B6=E6_wie?==?ISO-8859-2?Q?lkiej_tabeli?=
[MySQL] Czy da =?ISO-8859-2?Q?si=EA_wykonac_takie_powi=B1z?==?ISO-8859-2?Q?anie_mi=EAdzy_tabelami=2C_i_jak_to_odpyta=E6_? ==?ISO-8859-2?Q?=3F?=
zanotowane.pldoc.pisz.plpdf.pisz.plshanti.opx.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 |
|