繁体   English   中英

将数学放入sql查询

[英]Putting math into the sql query

我正在尝试创建一个高尔夫现场排行榜,该排行榜基于玩家与理想点数相等的点数。

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

}

在这个例子中,我只计算它的点和顺序。 然后在循环中我弄清楚理想点是什么。 这使得排行榜不正确,因为最有可能打出最多洞的球员将处于领先地位......

希望这是有道理的,并希望得到帮助... :-)

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

我不太确定你是否要求一个公式来做出正确的排名,或者你是否想要一个方法来在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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM