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