2016-12-01 6 views
0

はのは、PHPコードは、PASSを選択する必要がありますPHPのMySQLのランキングは

ID | STATUS | GRADE | RANK 

1 | FAIL | 99 | 
2 | FAIL | 95 | 
3 | PASS | 40 | 
4 | BAR | 99 | 
5 | PASS | 70 | 
6 | PASS | 85 | 
7 | BAR | 80 | 
8 | FAIL | 60 | 
9 | BAR | 50 | 

ランキングシステムの前に実行した場合、最初は、私はFAIL>ランクなく、このようなテーブルを持っているか、すでにランクを持っているとしましょう数でソートグループで順番にカウントされます> BARを順番に並べます。しかし、そのカテゴリでは、新しいカテゴリに入ることを開始すると、ランキングシステムは以前からカウントされます。

期待される結果:また

ID | STATUS | GRADE | RANK 

1 | FAIL | 99 | 4 
2 | FAIL | 95 | 5 
3 | PASS | 40 | 3 
4 | BAR | 99 | 
5 | PASS | 70 | 2 
6 | PASS | 85 | 1 
7 | BAR | 80 | 
8 | FAIL | 60 | 6 
9 | BAR | 50 | 

私は

ID | STATUS | GRADE | RANK 

1 | FAIL | 99 | 4 
2 | FAIL | 95 | 5 
3 | PASS | 40 | 3 
4 | BAR | 99 | 7 
5 | PASS | 70 | 2 
6 | PASS | 85 | 1 
7 | BAR | 80 | 8 
8 | FAIL | 60 | 6 
9 | BAR | 50 | 9 

にコーディングをアップグレードする予定がある場合は別の日に私が編集を試してみて、持っているように私のコードを編集するためにいくつかの手法を示すことができた場合私がここで見つけたいくつかのコードを学んでいますが、私はセッション変数に慣れていません。このコードはcronジョブ/日で使用されます

+0

テーブルのランクを更新するMySQLクエリを探していますか? –

+0

ええ、言い逃れました。 MySQLのクエリ..私はいくつかを見つけたが、グループ1から2まで数え続けるコードを見つけることができませんでした。ほとんどの数は各グループで1にリセットされます。数日間編集してみてください。解決策を見つけることができません –

+0

どのような基準でランクを設定していますか? –

答えて

0

ユーザー変数を使用してランクを設定し、更新するテーブルに対してサブクラスを結合すると、テーブルのランクを更新できます。このような

何か: - 私は状況によって注文するフィールド機能を使用していた

UPDATE sometable 
INNER JOIN 
(
    SELECT id, 
     `status`, 
     grade, 
     @rank:[email protected] + 1 AS rank 
    FROM 
    (
     SELECT id, 
       `status`, 
       grade 
     FROM sometable 
     ORDER BY FIELD(`status`, 'PASS', 'FAIL', 'BAR'), Grade DESC 
    ) sub0 
    CROSS JOIN (SELECT @rank:=0) sub1 
) sub2 
ON sometable.id = sub2.id 
SET sometable.rank = sub2.rank 

注意。この場合、厳密には必要ではありません(ステータスDESCで注文することができます)が、通常は意味のあるアルファベット順であるとは考えられないステータスの名前を指定すると、指定した順序でFIELDを注文することができます。

+0

私は持っています与えられたコード[ここ](http://sqlfiddle.com/#!9/dd5d2e)をテストしてください。私はそれを実行した後、SQLフィドルがクラッシュするようです:D ..後でwampまたはxampサーバーでテストします。ありがとう^ _^ 私が知っているかもしれない、どのsub0-sub2のために立つ。それと少しぼやけて.. –

+0

サブクエリからサブクラスを選択するとき/サブクエリをジョインするときにエイリアス名を付ける必要があります。この場合、私はちょうどサブ0(私の年齢をゲームのサブゼロ文字から表示します;-))、サブ1など – Kickstart