mysqli,通过增加一个数字来改变所有行,但不会超过某个值

时间:2018-05-01 16:52:12

标签: mysqli

“UPDATE得分SET points = red_chips WHERE red_chips> current_turn“

我希望得分等于几种不同的芯片颜色组合,但MAXIMUM任何单独的芯片颜色都可以给你的点数必须受current_turn的限制,如果芯片颜色较高则默认只加入current_turn。

“UPDATE得分SET points = red_chips + blue_chips + green_chips + yellow_chips + white_chips“

^这个但是每个颜色单独受current_turn限制为最大值。

我正在寻找一种方法来做到这一点,而无需为每种芯片颜色进行新的查询。

1 个答案:

答案 0 :(得分:1)

我认为您正在寻找的是LEAST(current_turn, [xyz]_chips)。如果芯片值小于current_turn,则将使用芯片值,如果芯片值大于current_turn,则使用current_turn的值。

也就是说,如果你希望点数等于所有芯片值的总和,每个值都限制在UPDATE score SET points = LEAST(current_turn, red_chips) + LEAST(current_turn, blue_chips) + LEAST(current_turn, green_chips) + LEAST(current_turn, yellow_chips) + LEAST(current_turn, white_chips) 的值,你需要这样的东西:

[xyz]_chips

假设current_turn值包含实际净值(校正每种颜色的值)。取决于[xyz]_chips相对于芯片值/颜色的代表,您可能希望通过芯片相对值来倍增。但是,如果您正在寻找芯片的数量,不一定要考虑颜色,或者MIN列是否包含颜色调整值,那么您应该没问题。

另外,为了澄清我的编辑,LEAST是一个聚合函数,它作用于从行中查找最小值的列。 NULL接受两个或多个参数并返回具有最小值的参数(如果其中任何一个是NULL,则返回Select BoxNumber, sum(CAST(AnalyteVal AS DECIMAL(10,2))) as [DesiredSum] from Food where analyte in ('ana1','ana3','ana4') and ISNUMERIC(AnalyteVal)=1 group by BoxNumber ),因此它将作用于每个单独行的值。 / p>