Как получить звание конкретного пользователя по конкретному предмету по всем предметам, набравшим признание, связи

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

Но моя цель состоит в том, чтобы получить конкретный рейтинг студентов по каждому предмету, и у меня есть подзапрос в цикле while моего первого оператора SQL следующим образом

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

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]