1

今日はかなりの時間を費やしてさまざまなことを試しましたが、どれもうまくいかないようです。これが私の状況です。具体的にソートされた行からのIDに基づいて行のランクを選択できるようにしたいと思います

たとえば、クエリが次のような場合:

SELECT id, name FROM people ORDER BY name ASC

次のような結果が得られます。

ID名
3 アンドリュー
1 ボブ
5 ジョー
4 ジョン
2 スティーブ

すべての行を返さずにランク(結果のどの行になるか)を取得したいと思います(PHPで)必要な行に到達するまでそれらをループします。

たとえば、「スティーブ」の「ランク」を選択して、この場合は 5 (彼の ID ではなく、上記のクエリでの彼の名前の「ランク」) を返すようにします。

同様に、ID が 1 である行のランクを選択できるようにしたいと考えています。 1) 他には何もありません。

私はさまざまな結果でできる限りGoogleで検索しました...大きなテーブルのクエリが非常に遅いか、あらゆる種類の一時テーブルとユーザー変数を作成する必要があります(前者は本当に避けたい、後者は生活できると思います。)

どんな助けや洞察も大歓迎です。

4

4 に答える 4

2

このようなもの?

SELECT Row, id, name
FROM (SELECT @row := @row + 1 AS Row, id, name
      FROM people
      ORDER BY name ASC)
WHERE Row = @SomeRowNumber

ID で調べたい場合は、where 句を変更するだけです。

于 2009-08-11T19:45:12.927 に答える
2

artfulsoftwareから:

SELECT p1.id, p1.name, COUNT( p2.name ) AS Rank
    FROM people p1
    JOIN people p2 
    ON p1.name < p2.name
    OR (
         p1.name = p2.name
         AND p1.id = p2.id
    )
GROUP BY p1.id, p1.name
ORDER BY p1.name DESC , p1.id DESC
LIMIT 4,1
于 2009-08-11T19:47:37.010 に答える
1

これを試して:

SELECT @rownum:=@rownum+1 `rank`, p.id, p.name
FROM people p, (SELECT @rownum:=0) r
ORDER BY name ASC
于 2009-08-11T19:47:28.990 に答える
0

私はこのコードを試してみます...ユーザーから結果を取得し、ユーザープロファイルの写真のテーブルをアップロードして、ユーザーポイントを計算して並べ替えた後よりも、他のユーザーに役立つ可能性があります。最後に、ユーザーのランキングの行番号を確認して追加しています...お楽しみください。ありがとう

set @row_num = 0;
set @calp =0;
select  if(@calp=(@calp:=user.cal_points), @row_num, @row_num := @row_num + 1) as row_number,user.* from 
(select user_skills.*,users.username,upload.file_name from user_skills join users on user_skills.user_id=users.id join upload on upload.upload_id=users.profile_pic order by user_skills.cal_points desc) as user
WHERE user.skill_name LIKE  '%ph%'
于 2014-08-07T08:28:45.077 に答える