2016-07-05 13 views
-1

IDのVs点のテーブルがあります。必要なIDのランクをポイントに戻したいと思います。私はテーブルを昇順に並べ替えることができ、ポイントに応じて次に要求されたIDの行番号を選択できる場合、私はこれを行うことができると思っています。問題は、1つのクエリで両方の操作(テーブルをソートして行番号を選択)を実行する方法がわからないことです。1つのMYSQLクエリで行番号をソートして取得する方法

注:php prepared statementを使用してクエリを実行しています。

2つの操作をワンステップで実行する方法については、何か助けてください。

データサンプル:

ID  Points 
x  12 
y  15 
w  4 
z  30 

必須:

to return the rank of any ID. example.. Where Id = y --> it returns "2". (the rank in the table) 

更新

私は以下のコードを実行し、それがテーブルをソートし、正しくランクを与え、私の必要性は今選択することです必要なID(ID = x)。どうやってするか?

SET @rank=0; 
SELECT ID, Points, @rank:[email protected]+1 AS rank From Cars ORDER BY Points DESC; 
+0

サンプルデータと希望の結果を入力してください。 2つの行の点数が同じであれば、何をすべきかに特に注意してください。 –

+0

質問を編集しました。ありがとう。 2つの行が同じポイントを持つ場合、行番号を返すので影響はありません。 –

答えて

1

この例では、あなた

mysql> SELECT ID,points, @curRank := @curRank + 1 as rank from gg ,(SELECT @curRank := 0) r order by points; 
+------+--------+------+ 
| ID | points | rank | 
+------+--------+------+ 
| w |  4 | 1 | 
| x |  12 | 2 | 
| y |  15 | 3 | 
| z |  30 | 4 | 
+------+--------+------+ 
4 rows in set (0.00 sec) 
+0

上記の例では、そのカウントを取得し、その順位を上記のようにあなたのクエリを変更しようとしました –

+0

多くのおかげでマヘシが、私はどのようにこれによってランクを得たか分かりません(@curRank:= @curRank + 1)? –

+0

私はそれをoとして定義しています。そして、あなたがあなたの質問を追加するなら、その値を増やすごとに増やすことができます。私はそれを修正するのを助けることができます –

0

を助けるあなたは、サブクエリを使用してMySQL公式ANSIランク機能を実装できます。

select t.*, 
     (select 1 + count(*) 
     from t t2 
     where t2.points < t.points 
     ) as rank 
from t; 

これは、変数を使用してもを行うことができますが、それはありますむしろ複雑です。

+0

私は本当に理解できません(t2.points t2から1 + count(*)を選択してください)、ランクは私の必要な出力を実行しますが、私はそれを試して返します –

関連する問題