0

プレーヤーが理想的なポイントに等しいポイント数に基づくゴルフライブリーダーボードを作成しようとしています。

理想は1ホール2点。したがって、プレーヤーが 3 ホールをプレーした場合、そのプレーヤーは 6 ポイントを獲得する必要があります。プレーヤーが 6 ポイントを持っている場合、プレーヤーのポイントは 0 になります。プレーヤーがより多く獲得した場合、彼は + ポイントを持ち、- ポイントが少なくなります。

ここでの問題は、プレーヤーが異なるホールにいるということです.2回プレーした人もいれば、3回プレーした人もいれば、7回プレーした人もいるかもしれません.差し引いた。

これが私がこれまでに得たものです:

$result = mysqli_query($con,"SELECT SUM(ls.points) points
                                                 , COUNT(ls.fk_playerid) holes
                                                 , ls.fk_playerid
                                                 , u.fname
                                                 , u.lname 
                                    FROM ".$prefix."_livescore ls
                                         INNER JOIN ".$prefix."_users u
                                            ON ls.fk_playerid = u.userid
                                    WHERE fk_gameid=$gameid GROUP BY fk_playerid ORDER BY points DESC");
while($row = mysqli_fetch_array($result)){

    $idealpoints = $row['points'] - ($row['holes'] * 2);
    $players[] = array('uid' => $row['fk_playerid'], 'name' => $row['fname'].' '.$row['lname'], 'hole' => $row['holes'], 'points' => $idealpoints);

}

この例では、ポイントを数えて順番に並べるだけです。そしてループで、理想的なポイントが何であるかを理解します。これにより、最も多くのホールをプレイしたプレーヤーがリードする可能性が最も高いため、リーダーボードが不正確になります...

これが理にかなっており、助けを期待していることを願っています... :-)

4

2 に答える 2

2
SELECT fk_playerid, fname, lname, points, holes, points-2*holes diff
FROM (
    SELECT  SUM(ls.points) points
            COUNT(ls.dk_playerid) holes,
            ls.fk_playerid, u.fname, u.lname
    FROM {$prefix}_livescore ls
    INNER JOIN {$prefix}_users u
    ON ls.fk_playerid = u.userid
    WHERE fk_gameid = $gameid
    GROUP BY fk_playerid) x
ORDER BY diff desc
于 2013-07-21T10:24:51.160 に答える