MySQLを使用して、どのように私は1つの特定の行のクエリ結果のランクを選択しますか?

StackOverflow https://stackoverflow.com/questions/1262448

  •  12-09-2019
  •  | 
  •  

質問

私はいろいろなことを試して、今日の時間のかなり多くを費やしてきたが、それらのどれも動作するようには思えません。ここに私の状況はだ、私は特にソートされた行からのIDに基づいて行のランクを選択できるようにしたいと思います。

たとえば、私のクエリのようなものである場合:

SELECT id, name FROM people ORDER BY name ASC

のような結果とます:

id   name
3    Andrew
1    Bob
5    Joe
4    John
2    Steve

私は、すべての行を返すと私は(PHPで)したいものになるまで、それらを投げるループせずに(それが結果に終わる何行)ランクを取得したいと思います。

それは返すように

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

同様に、私はこの例では1のIDを持っているものは何でも行のランクを選択できるようにしたいのですが、私はそれが何であるか、結果の行のだから(2の「ランク」を返したいのですが1のID)と、何もない。

私は結果を変える...のいずれか大きい方のテーブルのために本当に遅いクエリを持つか、一時テーブルおよびユーザー変数(私は本当に避けたいのですが、元のすべての種類を作成することで、私はできる限りGoogle'dました、後者は、私は)私が一緒に暮らすことができると仮定します。

すべてのヘルプや洞察力をいただければ幸いです。

役に立ちましたか?

解決

から 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

他のヒント

このような何か?

SELECT Row, id, name
FROM (SELECT @row := @row + 1 AS Row, id, name
      FROM people
      ORDER BY name ASC)
WHERE Row = @SomeRowNumber
あなたがIDで行きたい場合は、

、ちょうどwhere句を変更します。

これを試してください:

SELECT @rownum:=@rownum+1 `rank`, p.id, p.name
FROM people p, (SELECT @rownum:=0) r
ORDER BY name ASC

私はこのコードにしてみてください...他のを助けるかもしれません 私は、ユーザーからの結果を取得し、ユーザープロファイルPIC用のテーブルをアップロードし、私は、ユーザーのポイントを計算し、それらの上に並べ替えています後よりもそれに参加しています。 最後にチェックしていますし、ユーザーのランキングのために行番号を追加... それをInjoy。 感謝

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%'
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top