1
 SELECT a.userid, u.name, u.profilePic , 
   SUM(activity_weight) AS totalPoints, 
  (SELECT @rank:=1 +1) AS rank
 FROM activity_entries a 
 INNER JOIN users1 u ON u.id = a.userid 
 WHERE competitionId = '5216078af3730' 
 GROUP BY a.userid 
 ORDER BY totalPoints DESC

したがって、うまく機能するこのSQLクエリがあり、必要に応じてを返しますがtotalPoints、各結果のランク/行の位置も取得しようとしています。

現在、上記のクエリは各行のランク 2 を返しますが、明らかに適切にインクリメントされていません。

ヘルプ/アドバイスをいただければ幸いです。

J

4

1 に答える 1

2

これを試して :

(SELECT @rank:=@rank +1)

行ごとに 1 + 1 を追加しましたが、これは常に 2 になります。

編集:

変数を初期化する必要があります:

SET @rank=0;

同じ接続を使用する前に、このクエリを実行する必要があります。

SELECT
    tmp.userid,
    tmp.name,
    tmp.profilePic,
    tmp.totalPoints,
    (SELECT @rank:=@rank +1) AS rank
FROM (
    SELECT 
        a.userid, 
        u.name, 
        u.profilePic , 
        SUM(activity_weight) AS totalPoints
    FROM 
        activity_entries a 
    INNER JOIN users1 u 
        ON u.id = a.userid 
    WHERE 
        competitionId = '5216078af3730' 
    GROUP BY 
        a.userid 
    ORDER BY 
        totalPoints DESC
) as tmp
于 2013-09-16T12:33:32.407 に答える