0
---------------------------------------------------------------------
   id   |   stid   |   Subject    |   Total_cumulative  | Year     | 
----------------------------------------------------------------------
    1   |     23   |  English     |    40               | 2014/2015
    2   |     1    |  English     |    29               | 2014/2015
    3   |     13   |  Maths       |    40               | 2014/2015
    4   |     4    |  Physics     |    60               | 2014/2015
    5   |     13   |  Commerce    |    40               | 2014/2015
    6   |     1    |  Biology     |    89               | 2014/2015
    7   |     13   |  English     |    29               | 2014/2015
    8   |     13   |  Agric       |    60               | 2014/2015

今、私は次のように特定の学生の結果をすべて取得するクエリを持っています

SELECT * FROM results where stid='13' AND year='2014/2015' 
ORDER BY subject ASC LIMIT 20

そして、私は次の結果を持っています

---------------------------------------------------------------------
   id   |   stid   |   Subject    |   Total_cumulative  | Year     | 
----------------------------------------------------------------------
    3   |     13   |  Maths       |    40               | 2014/2015
    5   |     13   |  Commerce    |    40               | 2014/2015
    7   |     13   |  English     |    89               | 2014/2015
    8   |     13   |  Agric       |    60               | 2014/2015

しかし、私の目的は、各科目で特定の学生のランクを取得することであり、次のように、最初のSQLステートメントのwhileループ内にサブクエリがあります

SELECT rank_number, id, name, total_cumulative 
FROM ( SELECT id, name, total_cumulative, @rank:=@rank+1 AS rank_number FROM    
(SELECT pl.id, pl.name,SUM(en.total_cumulative) AS total_cumulative
FROM students pl JOIN results en ON pl.id = en.stid
WHERE en.subject = '$subject' AND en.year='$year' 
GROUP BY pl.id ORDER BY total_cumulative DESC ) AS rankings, 
(SELECT @rank:=0) AS r ) AS overall_rankings 
WHERE id = '13'
LIMIT 0, 1";

その後、次の結果が得られました

----------------------------------------------------------------------------
   id   |   stid   |   Subject    |   Total_cumulative  | Year       | Rank  
----------------------------------------------------------------------------
    3   |     13   |  Maths       |    40               | 2014/2015  | 1
    5   |     13   |  Commerce    |    40               | 2014/2015  | 2
    7   |     13   |  English     |    29               | 2014/2015  | 3
    8   |     13   |  Agric       |    60               | 2014/2015  | 1

しかし、クエリで同点をチェックし、次の順序で結果を取得する必要があります

----------------------------------------------------------------------------
   id   |   stid   |   Subject    |   Total_cumulative  | Year       | Rank  
----------------------------------------------------------------------------
    3   |     13   |  Maths       |    40               | 2014/2015  | 1
    5   |     13   |  Commerce    |    40               | 2014/2015  | 2
    7   |     13   |  English     |    29               | 2014/2015  | 2
    8   |     13   |  Agric       |    60               | 2014/2015  | 1

私はmysqlプログラミングの初心者です助けてください

4

0 に答える 0