项目开发过程中,我们经常需要去修改一些预设值,比如在一个关于统计学生成绩中,我们需要取得一个同学所有学期(或许跨度三个学年,也或许十年,这个不是关心的内容)的单一学科的平均成绩。这种例子很多,目前我接手的一个WEBGAME项目中,数值系统已经内置完毕,但在开发过程中,我们需要进行单一兵种的生产实例,于是需求产生了。
目前, 兵种的生产数值系统已经确定完毕,在单元测试中,因为不需要考虑过多的因素,比如科技,工厂的一些级别,所以只能按最低级的速度来测试,于是问题产生了。单独生产一个兵,即使是最底级的那种,大概也在30分钟之外。项目组决定将所有生产速度下调100倍,在MYSQL中,有一个函数在这里起了很大的作用:CEILING,MYSQL手册如下介绍:
CEILING(X) 返回不小于 X 的最小整数: mysql> SELECT CEILING(1.23); -> 2 mysql> SELECT CEILING(-1.23); -> -1 注意,返回值被转换为一个 BIGINT!
MYSQL在update更新时对子查询中规定,不允许更改在子查询中的表,也就是无法操作相同的表:UPDATE XXX SET XX=(SELECT XX FROM XXX) WHERE....这会导致一个警告错误,并且停止执行,于是改造更新语句如下:
UPDATE soldierattribrsh A , (SELECT CEILING(`SoldierArributeValue`/100) AS ceils FROM soldierattribrsh WHERE `SoldierArributeId`='13') B SET A.SoldierArributeValue=B.ceils WHERE A.`SoldierArributeId`='13'Query通过!

