У меня есть таблица MySQL с викторинами и таблица, в которой хранятся результаты этих викторин. Строка результата имеет идентификатор пользователя, идентификатор викторины (редактирование: временные метки) и числовой балл. Пользователи могут пройти тест более одного раза, но мы учитываем только первый раз, когда они проходят каждый тест.
Я пытаюсь сделать запрос, который скажет мне, сколько раз каждый пользователь появлялся в первой десятке викторины (при условии, что викторина закрыта), и ранжирую этих пользователей по тому, сколько раз они были в этом диапазоне. Это позволило бы мне отображать рейтинг за все время в зависимости от того, как они финишировали.
Любые идеи о том, как я могу это сделать?
Вот соответствующие части схемы.
Контрольный опрос:
- ID
- Открыто (отметка времени)
- Закрыть (отметка времени)
Пользователь:
- ID
- Электронная почта, имя и т. д. в качестве информации профиля
Результат викторины:
- ID
- Идентификатор викторины
- ID пользователя
- Время начала (отметка времени)
- Конец времени (отметка времени)
- Оценка (целое число)
Моя первая попытка была такой:
SELECT
distinct least(user_id, time_end) as user_score, result_id, quiz_id, user_id, score, time_end - time_start as duration
FROM results
WHERE time_end != 0 AND user_id != 1 AND user_id != 0
GROUP BY quiz_id, user_score
ORDER BY user_id, time_end ASC;
Это несколько полезно, но я понял, что иду в совершенно неправильном направлении, когда понял, что мне нужно подсчитать, сколько раз пользователь появлялся в первой десятке. точка (конструктор, здесь).