Vicces MySQL, vagy csak én nem figyelek?

Kedvenc böngészős játékom forráskódjában van egy SQL számítás, ami egy bolygó ökológiájának változását számolja ki. Ebben van egy sima szorzat masik.db*ff.coef amire azt mondja, hogy sajnos túlcsordul az UNSIGNED BIGINT . De! Ha ugyanezt módosítom erre: (masik.db/1)*ff.coef akkor nem csordul túl. Gondoltam megviccelem, (masik.db*1)*ff.coef . Na ez is túlcsordul :getlost:

:blink: A valódi megoldás itt: http://stackoverflow.com/questions/11698613/bigint-unsigned-value-is-out-of-range-my-sql

V1:

select egyik.bolygo_id,egyik.eroforras_id,
if(b.terulet>0,sum((masik.db*ff.coef)/if(masik.eroforras_id>0,b.terulet/100000,1))*egyik.db/1000000-if(egyik.db<1000,1000-egyik.db,0),-egyik.db) as delta
from bolygo_eroforras egyik,bolygo_eroforras masik,faj_faj ff,bolygok b
where egyik.eroforras_id=ff.faj_id
and masik.eroforras_id=ff.masik_faj_id
and egyik.bolygo_id=masik.bolygo_id
and b.id=egyik.bolygo_id
and b.bolygo_id_mod=0
and b.tulaj!=0
and ff.coef IS NOT NULL
group by egyik.bolygo_id,egyik.eroforras_id;

Error Code: 1690. BIGINT UNSIGNED value is out of range in '((`zanda`.`masik`.`db` * 1) * `zanda`.`ff`.`coef`)'

V2:

select egyik.bolygo_id,egyik.eroforras_id,
if(b.terulet>0,sum(((masik.db/1)*ff.coef)/if(masik.eroforras_id>0,b.terulet/100000,1))*egyik.db/1000000-if(egyik.db<1000,1000-egyik.db,0),-egyik.db) as delta
from bolygo_eroforras egyik,bolygo_eroforras masik,faj_faj ff,bolygok b
where egyik.eroforras_id=ff.faj_id
and masik.eroforras_id=ff.masik_faj_id
and egyik.bolygo_id=masik.bolygo_id
and b.id=egyik.bolygo_id
and b.bolygo_id_mod=0
and b.tulaj!=0
and ff.coef IS NOT NULL
group by egyik.bolygo_id,egyik.eroforras_id;

1000 row(s) returned

V3:

select egyik.bolygo_id,egyik.eroforras_id, if(b.terulet>0,sum(((masik.db*1)*ff.coef)/if(masik.eroforras_id>0,b.terulet/100000,1))*egyik.db/1000000-if(egyik.db<1000,1000-egyik.db,0),-egyik.db) as delta from bolygo_eroforras egyik,bolygo_eroforras masik,faj_faj ff,bolygok b where egyik.eroforras_id=ff.faj_id and masik.eroforras_id=ff.masik_faj_id and egyik.bolygo_id=masik.bolygo_id and b.id=egyik.bolygo_id and b.bolygo_id_mod=0 and b.tulaj!=0 and ff.coef IS NOT NULL group by egyik.bolygo_id,egyik.eroforras_id; Error Code: 1690. BIGINT UNSIGNED value is out of range in '((`zanda`.`masik`.`db` * 1) * `zanda`.`ff`.`coef`)'

Egyszerűbben: