2016-04-21 4 views
-1

У меня есть таблица результатов экзамена. Мне нужно получить отчет о конкретном участнике и получить его рейтинг.Получить информацию о рецензиях и рассчитать рейтинг

enter image description here

, например, участник с participant_id 15 должны иметь рейтинг 3 среди всего 4 записей. так что результат я ищу будет:

id: 1 
exam_id: 3 
participant_id: 15 
score: 343.23 
ranking: 3 

Я знаю, что могу получить запись и получить ранжирование через некоторый PHP код, но мне интересно, если это возможно с помощью запросов Mysql.

Я googled, но на самом деле не нашел хорошего решения. Любой ответ высоко оценен!

+1

Что случилось с PHP? И как рейтинг работает со связями? – Strawberry

ответ

1

Это функция row_number в postgresql и других базах данных, которых, к сожалению, нет в mysql.

Эта статья http://www.mysqltutorial.org/mysql-row_number/ объясняет, как эмулировать его в MySQL

Чтобы адаптировать пример из него

SET @row_number = 0; 

SELECT 
    (@row_number:[email protected]_number + 1) AS rank, id, participant_id,exam_id, score 
FROM 
    exams 
LIMIT 5; 
0

После запроса даст вам нужный результат

select t2.id,t2.exam_id,t2.exam_id,t2.participant_id,t2.score,t2.ranking from 
(SELECT t.id,t.exam_id,t.participant_id,t.score,(@num:[email protected]+1) AS 
ranking FROM table1 t cross join (SELECT @num:=0) AS dummy 
ORDER BY t.score desc)as t2 where t2.participant_id=15; 
0

Вы можете запустить запрос для создания отдельной таблицы результатов, а затем добавить условие для получения ранга требуемого участника.

здесь запрос, вы можете попробовать

SELECT * FROM (SELECT re.*, @curRow := @curRow + 1 AS rank 
FROM results re JOIN (SELECT @curRow := 0) r 
WHERE 1 ORDER BY re.`score` DESC) AS tablea 
WHERE participant_id=15 

вот результат

id exam_id participant_id score rank 
1 3  15    343.23 3 
Смежные вопросы