需要执行两次ORDER BY,排名问题

时间:2017-02-19 21:01:22

标签: php mysql sql-order-by leaderboard

我一直在努力设置好几个月和几个月! 我需要帮助设置我的数据库的排名。

这是我当前代码的样子:

$db->queryNoReturn("SET @a:=0");
return $db->query("
    SELECT * FROM
        (SELECT 
                `FFA_Stats`.`id`, 
                `FFA_Stats`.`player_uuid`,
                `FFA_Stats`.`points`,
                `FFA_Stats`.`hits`,
                `FFA_Stats`.`shots`,
                `FFA_Stats`.`wins`,
                `FFA_Stats`.`tkills`, 
                `FFA_Stats`.`tdeaths`, 
                (`FFA_Stats`.`tkills`/`FFA_Stats`.`tdeaths`) as `KDR`, 
                `player`.`name`, 
                `player`.`uuid`, 
                `player`.`online`, 
                (@a:=@a+1) AS rank
            FROM `FFA_Stats`
            INNER JOIN `player` ON `FFA_Stats`.`player_uuid`=`player`.`uuid`
            ORDER BY `points` DESC
        ) AS `sub`
    ");

基本上它按点排序,您可以在这里查看它的样子:http://filipvlaisavljevic.com/clash/ffa.php

我想要做的就是在排序表中添加排名,这样得分最多的玩家就是#1等。

有谁知道该怎么做?

1 个答案:

答案 0 :(得分:0)

通常,排名编号是您可以通过迭代查询结果的行生成的整数。例如。 echo $ count ++;

如果您已在数据库中计算或归因于排名,则可以添加以逗号分隔的“order by”语句。例如

    FROM `FFA_Stats`
    INNER JOIN `player`
    ON `FFA_Stats`.`player_uuid`=`player`.`uuid`
    ORDER BY `rank` DESC, `points` DESC) AS `sub`
        ");