获取mysql表中的当前位置

时间:2017-09-23 07:50:45

标签: 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 ?, ?

我想用

左键加入此“查询”
SELECT COUNT(1) WHERE clans.points >= clans.points

但我不知道如何。

什么是正确的查询?

2 个答案:

答案 0 :(得分: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 ?, ?

否则,您可以像使用其他答案一样使用相关子查询。

答案 1 :(得分: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(*)未找到任何部落,则会返回0,因此在此使用COALESCE是多余的。