Pytanie o MySQL (zapytanie)
milutka - 17-06-2007 00:16
Pytanie o MySQL (zapytanie)
Witam, chcialbym zbudowac dosc spore zapytanie. Nie wiem ogolnie czy jest to mozliwe do wykonania w samym MySQL, lecz zawsze warto zapytac. Wiec zaczynam tlumaczenie:
Istnieje baza produktow. Struktura produktu wyglada tak:
-- product ... price float(7,2), vat_percents INT, promotion_percents INT, promotion_price float(7,2) --
Cena produktu to:
$this->vat = $result['vat_percents']; if($this->vat > 0) { $this->price = $result['price']+(($this->vat/100)* $result['price']); if($result['promotion_percents'] > 0) $this->price = $this->price*($this->promotion_percents/100); if($result['promotion_price'] > 0) { $this->old_price = $this->price; $this->price = $this->promotion_price+($this->promotion_price*($this->vat/100)); } } else { $this->price = $result['price']; if($result['promotion_percents'] > 0) $this->price = $this->price*($this->promotion_percents/100); if($result['promotion_price'] > 0) { $this->old_price = $this->price; $this->price = $this->promotion_price; } }
I teraz jak posortowac w MySQL rekordy produktow wg. ceny (price, ktore osiagnelismy w $this->price)? ;-)
=?UTF-8?B?RmlsaXAgUmVtYmlhxYJrb3dza2k=?= - 17-06-2007 00:16
milutka wrote at 2007-05-30 15:59: > Witam, > chcialbym zbudowac dosc spore zapytanie. Nie wiem ogolnie czy jest to > mozliwe do wykonania w samym MySQL, lecz zawsze warto zapytac. > Wiec zaczynam tlumaczenie: > > Istnieje baza produktow. > Struktura produktu wyglada tak: > > -- > product ... > price float(7,2), > vat_percents INT, > promotion_percents INT, > promotion_price float(7,2) > -- > > Cena produktu to: > > $this->vat = $result['vat_percents']; > if($this->vat > 0) { > $this->price = $result['price']+(($this->vat/100)* $result['price']); > if($result['promotion_percents'] > 0) > $this->price = $this->price*($this->promotion_percents/100); > if($result['promotion_price'] > 0) { > $this->old_price = $this->price; > $this->price = $this->promotion_price+($this->promotion_price*($this->vat/100)); > } > } > else { > $this->price = $result['price']; > if($result['promotion_percents'] > 0) > $this->price = $this->price*($this->promotion_percents/100); > if($result['promotion_price'] > 0) { > $this->old_price = $this->price; > $this->price = $this->promotion_price; > } > } > > I teraz jak posortowac w MySQL rekordy produktow wg. ceny (price, ktore > osiagnelismy w $this->price)? ;-)
opcja 1) SELECT * FROM product ORDER BY CASE WHEN vat_percents > 0 AND promotion_price > 0 THEN promotion_price * ( 1 + vat_percents / 100 ) ELSE CASE WHEN ... makabra .. makabra ... END END;
opcja 2) dodaÄ? pole wyliczane (trigger?) i po nim sortowaÄ?
=?UTF-8?B?UGF3ZcWCIE1hdGVqc2tp?= - 17-06-2007 00:16
milutka wrote: > Witam, > chcialbym zbudowac dosc spore zapytanie. Nie wiem ogolnie czy jest to > mozliwe do wykonania w samym MySQL, lecz zawsze warto zapytac. > Wiec zaczynam tlumaczenie: > > Istnieje baza produktow. > Struktura produktu wyglada tak: > > -- > product ... > price float(7,2), > vat_percents INT, > promotion_percents INT, > promotion_price float(7,2) > -- > > Cena produktu to: > > $this->vat = $result['vat_percents']; > if($this->vat > 0) { > $this->price = $result['price']+(($this->vat/100)* $result['price']); > if($result['promotion_percents'] > 0) > $this->price = $this->price*($this->promotion_percents/100); > if($result['promotion_price'] > 0) { > $this->old_price = $this->price; > $this->price = $this->promotion_price+($this->promotion_price*($this->vat/100)); > } > } > else { > $this->price = $result['price']; > if($result['promotion_percents'] > 0) > $this->price = $this->price*($this->promotion_percents/100); > if($result['promotion_price'] > 0) { > $this->old_price = $this->price; > $this->price = $this->promotion_price; > } > } > > I teraz jak posortowac w MySQL rekordy produktow wg. ceny (price, ktore > osiagnelismy w $this->price)? ;-)
Zapisz to to samo w SQL i wstaw zamiast ORDER BY. A najlepiej, to dodaj kolumnÄ?, gdzie bÄ?dziesz sobie przechowywa??a tÄ? warto??Ä? (wiem ??e to niezgodne z teoriÄ?, ale bardzo wygodne w praktyce!).
-- P.M.
szaman - 17-06-2007 00:16
> Zapisz to to samo w SQL i wstaw zamiast ORDER BY. > A najlepiej, to dodaj kolumnÄ?, gdzie bÄ?dziesz sobie przechowywa??a tÄ? warto??Ä? > (wiem ??e to niezgodne z teoriÄ?, ale bardzo wygodne w praktyce!). > Denormalizacja jest jak najbardziej zgodna z teoriÄ? - tylko musi byÄ? uzasadniona (z reszta jak ka??de dzia??anie ;-)
P??eÄ? "pytacza" jest rzeczywi??cie zagadkowa bo to jak o sobie pisze nie przystaje do nick'a.
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.plets2.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 |
|