Php 将数学放入sql查询

Php 将数学放入sql查询,php,mysql,math,Php,Mysql,Math,我正在尝试创建一个高尔夫直播排行榜,它是基于一个球员拥有多少与理想分数相等的分数 理想点是每个孔2个点。因此,如果一名球员打了3洞,他应该得到6分。如果玩家有6分,玩家的分数将是0。如果玩家赚得更多,他会得到+分,而得到更少的-分 这里的问题是球员们会在不同的洞里,有些人打了2洞,有些人打了3洞,也许有些人打了7洞。所以我需要计算总点数,计算洞的数量,然后减去它们,然后按减去的顺序排列 以下是我到目前为止得到的信息: $result = mysqli_query($con,"SELECT SUM

我正在尝试创建一个高尔夫直播排行榜,它是基于一个球员拥有多少与理想分数相等的分数

理想点是每个孔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);

}
在这个例子中,我只是计算点并按其排序。然后在循环中,我计算出理想点是什么。这使得排行榜不正确,因为打了最多洞的球员最有可能领先


希望这有意义,希望得到帮助…:-)

我不太确定您是在要求一个公式来进行正确的排名,还是只想在sql表达式中使用现有公式。我同意第一个假设

这个公式几乎是正确的。您还需要将
$idealpoints
与所打的洞数分开,如下所示:

$idealpoints=($row['points']-($row['holes']*2))/$row['holes']

因此,您将得到一个十进制值,您的排名可以基于该值。值越低,排名就越好;像这个例子:

球员1在2洞后得到5分(+比理想值高1)==(5-4)/2= 0.5理想点。
球员2在3洞后得到7分(+比理想值高1分) ==(7-6)/3=0,33理想点


球员2的排名将更高,因为他在三个洞后只有+1。球员1在两个洞后已经是+1。

哦,是的。。。工作就像一个符咒:-)
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