Запрос для получения ранга пользователя в таблице базы данных на основе двух строк - PullRequest
0 голосов
/ 09 октября 2018

Я работаю над приложением, в котором пользователи могут сдавать онлайн-экзамены, а затем им нужно знать свой рейтинг по всем экзаменам, принятым в приложении.

Это структура таблицы базы данных: enter image description here

После сдачи экзамена мне нужно получить ранг для конкретного пользователя (усуарио) на основе двух строк, первый ряд для получения ранга должен быть больше (puntuacion) и в случае того же(puntuacion) вторая строка, которая должна быть принята во внимание, является меньшей (duracion) для конкретного предмета экзамена (materia).

Мне нужна ваша помощь, чтобы создать необходимый запрос.

Ответы [ 3 ]

0 голосов
/ 09 октября 2018

Вы хотите, чтобы результаты сортировались по "puntuacion" и "duracion".Это сделано с order by

SELECT * FROM your_table ORDER BY puntuacion DESC, duracion ASC

Не совсем понятно, как вы хотите отсортировать, поэтому вам, возможно, придется переключиться на ASC с помощью DESC.

Если вы хотите добавить номер строки и иметь достаточно высокую версию MariaDB / Mysql (Mysql 8.0), тогда вы можете использовать оконную функцию: https://dev.mysql.com/doc/refman/8.0/en/window-function-descriptions.html

SELECT ROW_NUMBER() OVER (ORDER BY puntuacion DESC, duracion ASC) as row, * FROM your_table ORDER BY puntuacion DESC, duracion ASC

0 голосов
/ 09 октября 2018

У меня есть рабочий запрос:

SELECT t.*, @rownum := @rownum + 1 AS rank FROM tb_examenes t, (SELECT @rownum := 0) r WHERE materia = 10 ORDER by puntuacion DESC, duracion ASC

Тогда мне нужно отфильтровать только то поле, которое мне нужно.

0 голосов
/ 09 октября 2018

Предполагая, что пользователи уникальны (удалите DESC, если вам нужно ранжировать в порядке возрастания):

SELECT * FROM tableName ORDER BY puntuacion DESC, duracion DESC;

Извлеките его как массив и получите строку с $result[array_search($user)].Не проверено, но должно работать, дайте мне знать.

Это довольно тяжело, если у вас много пользователей (каждый раз загружается каждый пользователь), но я не вижу других решений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...