Autor Zpráva
Pepik
Profil *
Zdravím,
jak docílit vynásobení vybraných polí v mysql?
Mám toto:

mysql_query("SELECT * FROM tabulka WHERE id IN(".str_replace('-',',',$id).")");

A potrebuji vynasobit vybrana data ze sloupce "cena". Neví někdo jak na to? V dokumentaci jsem našel operátor * ale ten je pro násobení svou sloupců.

Děkuji
Alphard
Profil
Sloupec můžete nahradit číslem
select 2*2
Pepik
Profil *
Díky.
Zkusil jsem tedy
"SELECT cena*2 FROM tabulka WHERE id IN(".str_replace('-',',',$id).")"
ale vypocita to spatně.
Tori
Profil
Pepik:
Jak špatně? Je ten sloupec číselného typu?
Pepik
Profil *
V DB mam u slouce cena decimal(10,2) (typ).


V polích je:
3.50*2.10*1.00 = 7,35

Ale PHP vrátí 7.00 (není tam zaokrouhlování).
DJ Miky
Profil
Tedy potřebuješ vynásobit hodnoty ze všech řádků mezi sebou (= produkt), podobně jako SUM() sčítá? MySQL na to nemá přímo funkci, ale dá se to obejít takto:
SELECT EXP(SUM(LOG(COALESCE(`cena`,1)))) FROM `tabulka` WHERE ...
(zdroj: http://lists.mysql.com/mysql/166184)

Jenom pozor, vzhledem k použitým funkcím nevyjde celé číslo a nemusí vyjít úplně přesně (čím větší počet čísel, tím méně přesnější), takže je potřeba zaokrouhlovat na vhodný počet desetinných míst.

Alternativou je vrátit všechny hodnoty do PHP a vynásobit je až v PHP (pokud jich je málo, bude to zřejmě rychlejší a přesnější než výše uvedené řešení).
Pepik
Profil *
DJ Miky:
Tedy potřebuješ vynásobit všechny sloupce mezi sebo
Nene potřebuju vynásobit vybrané ceny v jednom sloupci (ceny).
DJ Miky
Profil
Pepik:
Nene potřebuju vynásobit vybrané ceny v jednom sloupci (ceny).

Ano, omlouvám se, myslel jsem řádky, ne sloupce - hodnoty ze všech řádků v jednom sloupci. Příspěvek jsem upravil.
Alphard
Profil
Pepik:
Můžete uvést příklad? Já si myslím, že DJ Miky vám pořád radí něco, co vůbec nechcete.

Já váš dotaz chápu tak, že chcete jednotlivě v každém řádku vynásobit sloupec konstantou.
MySQL samozřejmě umí počítat s desetinnými čísly, zkuste dotaz [#3] spustit přímo v nějakém databázovém adminu, jestli to taky zaokrouhlí. Mně to nedělá.
Pepik
Profil *
To je přesně ono :-).
Díky moc, myslel jsem, že to bude lehčí.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0