我想在表格中获取当前位置,以获得一个氏族游戏的当前排名。
我正按照其名字搜索一个部落,按部落排序,但不知道如何获得其排名。
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
但我不知道如何。
什么是正确的查询?
答案 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
是多余的。