MySql SELECT查询

时间:2012-06-24 19:38:17

标签: php sql

我正在编写一个脚本,根据从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;";

2 个答案:

答案 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;