Wie erhalte ich den Rang eines bestimmten Benutzers in einem bestimmten Thema für alle Themen, die als Anerkennung für Beziehungen gewertet wurden?

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

Nun habe ich eine Abfrage, die alle Ergebnisse eines bestimmten Schülers wie folgt abruft:

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

und ich habe das folgende Ergebnis

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

Aber mein Ziel ist es, den jeweiligen Studentenrang in jedem Fach zu erreichen, und ich habe eine Unterabfrage in meiner while-Schleife meiner ersten SQL-Anweisung wie folgt:

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";

anach habe ich folgendes ergebn

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

Aber ich möchte, dass die Abfrage nach Verbindungen sucht und die Ergebnisse in der folgenden Reihenfolge ausgibt.

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

Bitte helfen Sie mir, ich bin ein Neuling in der MySQL-Programmierung

Antworten auf die Frage(0)

Ihre Antwort auf die Frage