Autor | Zpráva | ||
---|---|---|---|
martin6541 Profil |
#1 · Zasláno: 14. 5. 2021, 11:10:59
Dobrý den.
Potřebuju vyřešit pro mě nadlidský výkon. Musím v databázi navýšit cenu produktu o 15%, zaokrouhlit na desítky korun, ale informace o výrobcích jsou v jiné tabulce. Je to možné? Mám tabulku xx_virtuemart_product_prices, kde mám sloupec product_price, který obsahuje cenu bez dph. Použil bych tedy příkaz, ve kterém vezmu cenu produktu, připočtu DPH, zvednu ji o 15%, vydělím desíti, zaokrouhlím nahoru, vynásobím desíti a odečtu DPH: UPDATE xx_virtuemart_product_prices SET product_price = CEIL((product_price*1.21*1,15)/10)*10/1.21; Ale abych to mohl udělat jen u konkrétního výrobce, tak musím přidat podmínku WHERE. Ale výrobci jsou uvedeni v jiné tabulce. A zde moje začátečnické schopnosti končí. Mám tabulku xx_virtuemart_product_prices, kde mám sloupec virtuemart_manufacturer a v něm IDčka výrobců. V obou tabulkách mám také sloupec virtuemart_product_id, podle které to můžu spárovat. Ale jak? Nebo otázka možná bude znít .. . lze to? |
||
Kajman Profil |
#2 · Zasláno: 14. 5. 2021, 11:43:07
Nestačí Vám něco jako
UPDATE xx_virtuemart_product_prices SET product_price = CEIL((product_price*1.21*1,15)/10)*10/1.21 WHERE produkt_id IN (SELECT produkt_id FROM produkty WHERE vyrobce='Martin') ; Hlavně si udělejte zálohu (minimálně měněnou tabulku) a lepší je to nejprve zkoušet na testovacím stroji / databázi. |
||
martin6541 Profil |
#3 · Zasláno: 14. 5. 2021, 12:11:35
Kajman:
Jsem se upsal. Ta druhá tabulka je xx_virtuemart_product_manufacturers obsahuje sloupec virtuemart_manufacturer_id a virtuemart_produkt_id takže by to mělo konči takto? WHERE virtuemart_produkt_id IN (SELECT virtuemart_produkt_id FROM xx_virtuemart_product_manufacturer WHERE virtuemart_manufacturer_id='Martin') |
||
Kajman Profil |
Jestli podmínka funguje dle očekávání, můžete zkusit např. na selectu před updatem.
SELECT virtuemart_produkt_id, product_price old_price, ceil((product_price*1.21*1,15)/10)*10/1.21 new_price FROM xx_virtuemart_product_prices WHERE virtuemart_produkt_id IN ( SELECT virtuemart_produkt_id FROM xx_virtuemart_product_manufacturer WHERE virtuemart_manufacturer_id='Martin') |
||
martin6541 Profil |
#5 · Zasláno: 14. 5. 2021, 13:28:50
Kajman:
Tak možno Mi je vlstně jedno, jak to bude vypadat, jen když to bude fungovat. to old_price a new_price tam má opravdu být? Prostě tak jak to je napsáno, tak to použiju? |
||
martin6541 Profil |
#6 · Zasláno: 14. 5. 2021, 18:34:12
Zkouším tedy obě verze:
SELECT virtuemart_product_id, product_price old_price, ceil((product_price * 1.21 * 1,15) / 10) * 10 / 1.21 new_price FROM j3_virtuemart_product_prices WHERE virtuemart_product_id IN (SELECT virtuemart_product_id FROM j3_virtuemart_product_manufacturers WHERE virtuemart_manufacturer_id = '51') ; a UPDATE j3_virtuemart_product_prices SET product_price = CEIL((product_price*1.21*1,15)/10)*10/1.21 WHERE virtuemart_product_id IN (SELECT virtuemart_product_id FROM j3_virtuemart_product_manufacturers WHERE virtuemart_manufacturer_id = '51') ; A obě mi skončí hláškou: /*Error: " #21000Operand should contain 1 column(s)" in 1 statement*/ |
||
Kajman Profil |
#7 · Zasláno: 14. 5. 2021, 18:55:53
Zkuste 1.15 (s tečkou).
|
||
martin6541 Profil |
Kajman:
rofl, toho sem si nevšiml :) zkusím A který z nich je tedy lepší? Nevadí, že jsem z toho vyjmul to old_price a new_price? /*Result: "87 row(s) affected ( 0,06 sec)" */ Děkuji za spolupráci |
||
Kajman Profil |
#9 · Zasláno: 14. 5. 2021, 21:38:22
martin6541:
„A který z nich je tedy lepší?“ SELECT - jen vypíše data - tím si ověříte správnost WHERE části UPDATE - mění data |
||
Časová prodleva: 3 roky
|
0