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

私は

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

で "AGAIN" このクエリ左結合したいと思いますが、私は方法を知ってはいけません。

正しいクエリは何ですか?

+0

[MySQLでグループ化されたランキングを実行する方法](https://stackoverflow.com/questions/532878/how-to-perform-grouped-ranking-in-mysql) – twoleggedhorse

答えて

1

このため相関サブクエリを使用することができます。あなたがこの数字に1を加えると、あなたは一族のランクを得ます。

注:何の氏族がそのように冗長である、ここでCOALESCEを使用して0を返しますサブクエリCOUNT(*)によって発見されていない場合。

+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 ?, ? 

そうしないと、この他の回答のように相関サブクエリを使用することができます。相関サブクエリは、より多くのポイントを持つ一族の数を返す各藩について

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 ?, ? 

関連する問題