Ahojte,
rád by som sa spýtal ako riešiť situáciu keď chcem v MySQL robiť nejaký zložitejší výpočet a ten si potom ako keby uložiť do premennej a neskôr to použiť.
príklad:
select round(veľmi zložitý výpočet) as premenna, round(daľší zložitý výpočet * premena) as premenna2 from tabulka
problém je v tom že keď použijem premenna v tom druhom výpočte tak tam to berie ako stĺpec v tabuľke ktorý ale neexistuje a teda mi to hlási chybu.
za rady vopred ďakujem
MySQL dočasná premenná
-
feromakovi
Expert
- Príspevky: 165
- Registrovaný: 24 okt 2008, 14:16
- Bydlisko: Bánovce nad Bebravou
-
audiotrack
VIP
- Príspevky: 25958
- Registrovaný: 09 sep 2005, 18:39
- Kontaktovať používateľa:
Re: MySQL dočasná premenná
osobne by som to asi riešil cez temporary table alebo cez view, ale to záleží od toho čo je myslené tým "veľmi zložitý výpočet"
Re: MySQL dočasná premenná
feromakovi, napis presne co mas a co ti vyhadzuje a poradime ti
-
feromakovi
Expert
- Príspevky: 165
- Registrovaný: 24 okt 2008, 14:16
- Bydlisko: Bánovce nad Bebravou
Re: MySQL dočasná premenná
no takže veľmi zožitý výpočet. počítam vzdialenosť medzi dvoma gps bodmi:
round(6378 * 2 * ASIN(SQRT( POWER(SIN((48.7311905 - lat) * pi()/180 / 2), 2) + COS(48.7311905 * pi()/180) * COS(lat * pi()/180) * POWER(SIN((18.2478693 - lon) * pi()/180 / 2), 2) )),2) as distance,
a keď tú samotnú vzdialenosť chcem použiť ešte v inom výpočte konkrétne na náklady cesty autom, ktoré tiež závisia od vzdialoenosti tak to riešim tak že tú vzdialenosť znova počítam:
6378 * 2 * ASIN(SQRT( POWER(SIN((48.7311905 - lat) * pi()/180 / 2), 2) + COS(48.7311905 * pi()/180) * COS(lat * pi()/180) * POWER(SIN((18.2478693 - lon) * pi()/180 / 2), 2) )) * 5 / 50 * diesel + 50 * diesel as naklady
toto mám v jednom selecte. a mojím zámerom je to dostať túto druhú časť do štádia asi takého:
distance *5 / 50 * diesel + 50 * diesel as naklady
toto bude efektívnejšie a bude to aj prehľadnejšie.
round(6378 * 2 * ASIN(SQRT( POWER(SIN((48.7311905 - lat) * pi()/180 / 2), 2) + COS(48.7311905 * pi()/180) * COS(lat * pi()/180) * POWER(SIN((18.2478693 - lon) * pi()/180 / 2), 2) )),2) as distance,
a keď tú samotnú vzdialenosť chcem použiť ešte v inom výpočte konkrétne na náklady cesty autom, ktoré tiež závisia od vzdialoenosti tak to riešim tak že tú vzdialenosť znova počítam:
6378 * 2 * ASIN(SQRT( POWER(SIN((48.7311905 - lat) * pi()/180 / 2), 2) + COS(48.7311905 * pi()/180) * COS(lat * pi()/180) * POWER(SIN((18.2478693 - lon) * pi()/180 / 2), 2) )) * 5 / 50 * diesel + 50 * diesel as naklady
toto mám v jednom selecte. a mojím zámerom je to dostať túto druhú časť do štádia asi takého:
distance *5 / 50 * diesel + 50 * diesel as naklady
toto bude efektívnejšie a bude to aj prehľadnejšie.
-
audiotrack
VIP
- Príspevky: 25958
- Registrovaný: 09 sep 2005, 18:39
- Kontaktovať používateľa:
Re: MySQL dočasná premenná
no vidíš, tak zo zložitého výpočtu sme sa dostali k tvojmu zlému návrhu. Mysql má dátový typ na prácu so súradnicami: http://dev.mysql.com/doc/refman/5.1/en/ ... sions.html kde máš okrem iného aj pekné funkcie na výpočet vzdialeností medzi nimi
Re: MySQL dočasná premenná
pouzi stored procedures
Kód: Vybrať všetko
http://dev.mysql.com/tech-resources/articles/mysql-storedproc.html