0

MySQLテーブルから取得した値に基づいてKill-DeathRatio(KDR)を計算するスクリプトを書いています。他の人のコードを修正しています。私はそれのほとんどを再び機能させることができました。しかし、私はここで立ち往生しています。KDRは、すべてのキルを加算し、プレイヤーの死亡数で割ることによって計算されます。しかし、プレイヤーが死んだことがない場合、KDRは0で出てきます。KDRを評価するときに1として0を読み取る方法が必要です。私はこれをグーグルで検索し、使用できる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;";
4

2 に答える 2

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
于 2012-06-24T19:43:09.513 に答える
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;
于 2012-06-24T19:55:49.507 に答える