我正在编写一个脚本,根据从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;";
答案 0 :(得分:4)
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 :(得分:1)
我认为你的意思是当它为0时,除数应该被视为1。在这种情况下,你会这样做
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;