SELECT sub PREPARE
Sziasztok!
Van egy feladatom, ahol matematikai műveleteket kell végrehajtanom, soronként mást, de az adatok forrása ugyan az.
Pl.:
---
id | keplet | x | y | z | eredmény
0 | (z*x) | 2 | 0.5 | 10 | 20
1 | (y-x) | 3 | 5 | 2 | 2
---
Az eredmény-t nem tudom hogy milyen lekéréssel lehetne kiszámolni.
A gond annyi, hogy lehet a képlet bármi, nem csak ilyen egyszerűek.
Az is lehet, hogy nem csak képletet tartalmaz, lehet sql parancs is.
Sőt, utóbbi jobb is lenne...
Ahogy olvasgattam, keresgéltem az EXECUTE látszik kézenfekvőnek.Ezt elmélet gyanánt írtam le, mert egyrészt nem működik, másrészt remélem jól szemlélteti a szándékom :)
Ugyanakkor magában a következő kód működik:PHP-ben is elvégezhetném a számolást, de úgy gondolom a MySQL gyorsabban számolna esetemben mint a PHP... meg egyébként is.
A lényeg, hogy utóbbit kellene minden soron végrehajtani.
Valakinek volna ötlete, megoldása erre?
Nagyon köszönöm
■ Van egy feladatom, ahol matematikai műveleteket kell végrehajtanom, soronként mást, de az adatok forrása ugyan az.
Pl.:
---
id | keplet | x | y | z | eredmény
0 | (z*x) | 2 | 0.5 | 10 | 20
1 | (y-x) | 3 | 5 | 2 | 2
---
Az eredmény-t nem tudom hogy milyen lekéréssel lehetne kiszámolni.
A gond annyi, hogy lehet a képlet bármi, nem csak ilyen egyszerűek.
Az is lehet, hogy nem csak képletet tartalmaz, lehet sql parancs is.
Sőt, utóbbi jobb is lenne...
Ahogy olvasgattam, keresgéltem az EXECUTE látszik kézenfekvőnek.
SELECT
(
SET @qry = CONCAT('SELECT ', `math`.`keplet`);
PREPARE stmt FROM @qry;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
) as `eredmeny`
FROM
`math`
Ugyanakkor magában a következő kód működik:
SET @qry = CONCAT('SELECT ', '(5*4)');
PREPARE stmt FROM @qry;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
A lényeg, hogy utóbbit kellene minden soron végrehajtani.
Valakinek volna ötlete, megoldása erre?
Nagyon köszönöm
PostgreSQL-ben én ilyesmit
[később]
Cumi. Akár a mafla MSSQL: „Dynamic SQL is not allowed in stored function or trigger” – és innentől fejre is állhatsz, mert legfeljebb tárolt eljárást használhatsz, amitől a kódod még nem lesz szebb. Szóval korábbi javaslat visszavonva. :(
- futtasd le a képlet
- kérdezd le az eredményt
Azzal, hogy ez mennyire gyors, akkor kell csak foglalkozni, ha már lassú a rendszer.