2017-09-23 136 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 ?, ? 

否則,您可以在這個其他答案使用相關子查詢等。