2

クエリ:

SELECT u.user_id,r.totalVotes votes,r.totalPoints rating,@row:=@row+1 rank 
FROM mismatch_user u 
LEFT JOIN ratingItems r ON u.user_id=r.uniqueName,
(SELECT @row:=0) pos 
ORDER BY votes DESC,rating DESC

出力:

user_id    votes   rating  rank
2            2      10      2
6            2      9       6
3            2      5       3
1            1      5       1
4            1      5       4
27           1      5       27
9            0      0       9

ランキングは悲惨なことに私に真実を教えてくれず、それはuser_idに基づいています。誰か助けてもらえますか?

4

2 に答える 2

4

これは役に立ちますか?

select r.*, @row:=@row+1 rank 
  from 
    (SELECT u.user_id,r.totalVotes votes,r.totalPoints rating
       FROM mismatch_user u 
         LEFT JOIN ratingItems r ON u.user_id=r.uniqueName
    ) r
    join (SELECT @row:=0) pos 
ORDER BY r.votes DESC, r.rating DESC
于 2012-06-20T07:02:17.640 に答える
1

シーケンスを生成しているため、トリッキーな動作につながる可能性があります。

クエリが正しければ、ランクで並べ替える最も安全な方法は、別のSELECTに埋め込むことです。

SELECT *
FROM (
    SELECT u.user_id,r.totalVotes votes,r.totalPoints rating,@row:=@row+1 rank 
    FROM mismatch_user u 
    LEFT JOIN ratingItems r ON u.user_id=r.uniqueName,
    (SELECT @row:=0) pos 
    ORDER BY votes DESC,rating DESC) T
ORDER BY rank;
于 2012-06-20T07:00:05.570 に答える