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`)'