我正在编写一个脚本,该脚本根据从MySQL表获得的值计算杀死比(KDR)。我正在修复别人的代码。我已经设法让大部分工作再次工作。但是,我被困在这里了。KDR 的计算方法是将所有击杀数相加,然后除以玩家的死亡人数。但是,如果玩家从未死亡,那么 KDR 以 0 出现。我需要一种方法来读取 0,在评估 KDR 时为 1。我确实用谷歌搜索了这个,并试图编写一个我可以使用的UDF,但唉,它没有帮助。
下面是有问题的 SQL 查询
function get_leaders($civ, $neu, $riv){
$sSQL = "SELECT *, ((civilian_kills * _civ + neutral_kills * _neu + rival_kills * _riv) / deaths ) as KDR
from sc_players
order by KDR DESC
LIMIT 100;";
http://dev.mysql.com/doc/refman/5.5/en/control-flow-functions.html#function_if
SELECT *,
IF(deaths,civilian_kills * $civ + neutral_kills * $neu + rival_kills * $riv) / deaths,1) as KDR
from sc_players
order by KDR DESC
LIMIT 100
我认为
你的意思是除数在 1 时应该被视为 0。在这种情况下,你会做
SELECT *, ((civilian_kills * $civ + neutral_kills * $neu + rival_kills * $riv) /
(IF deaths = 0 THEN 1 ELSE deaths)
) as KDR from sc_players order by KDR DESC LIMIT 100;
假设死亡是非阴性的,你也可以做:
SELECT *, ((civilian_kills * $civ + neutral_kills * $neu + rival_kills * $riv) /
GREATEST(deaths, 1)
) as KDR from sc_players order by KDR DESC LIMIT 100;