2017-09-23 86 views
0

我想获取表中的当前位置以获得当前家族的排名。在mysql表中获取当前位置

我正在通过它的名字寻找一个氏族,按氏族点数排序,但不知道如何获得它的排名。

SELECT clans.*, players.playername 
FROM `clans` 
LEFT JOIN players ON clans.leader_userid = players.userid 
WHERE clanname LIKE ? 
ORDER BY clans.points DESC LIMIT ?, ? 

我想LEFT JOIN “AGAIN” 这个查询与

SELECT COUNT(1) WHERE clans.points >= clans.points 

,但我不知道怎么办。

什么是正确的查询?

+0

可能重复的[如何在MySQL中执行分组排名](https://stackoverflow.com/questions/532878/how-to-perform-grouped-ranking-in-mysql) – twoleggedhorse

回答

1

您可以使用此相关子查询:

SELECT c.*, players.playername, 
     (SELECT COUNT(*) 
     FROM clans c2 
     WHERE c2.points >= c.points) + 1 AS rank   
FROM clans c 
LEFT JOIN players ON c.leader_userid = players.userid 
WHERE c.clanname LIKE ? 
ORDER BY c.points DESC LIMIT ?, ? 

对于相关子查询返回有更多的点氏族的数量每个氏族。如果你给这个数字加1,那么你得到了氏族的等级。

注:如果子查询COUNT(*)没有发现家族将因此使用COALESCE这里是多余的返回0

+0

您的查询完成我所需要的, 非常感谢! – NoobyLearner

2

我不完全明白你想要做什么。但是,你可以把这个查询作为子查询,并加入像这样:

SELECT clans.*, players.playername, COALESCE(sub.PointsCount) AS PointsCount 
FROM `clans` 
LEFT JOIN players ON clans.leader_userid = players.userid 
LEFT JOIN 
(
    SELECT points, COUNT(1) PointsCount 
    FROM clans 
    GROUP BY points 
) as sub on sub.points >= clans.points 
WHERE clanname LIKE ? 
ORDER BY clans.points DESC LIMIT ?, ? 

否则,您可以在这个其他答案使用相关子查询等。