2016-03-18 3 views
3

У меня есть две таблицы MySQL следующим образомMySQL ранжирование на основе баллов и время играл

Таблица: забьет

enter image description here

Таблица: пользователь

enter image description here

Мое требование состоит в том, чтобы ранжировать оценку и извлекать, если счет total_score больше некоторого значения (например, рейтинг всех баллов, если total_score меньше 15). Если баллы равны, тогда учитывайте время.

Я написал следующий запрос, чтобы получить строки, включая ранг (я не очень хорошо разбираюсь в SQL-запросах, но я попытался найти способ сделать это - не повезло).

Покушение - 1

SELECT score.total_score, 
     CONCAT(users.user_first_name,' ', users.user_last_name) AS name, 
     users.user_email, 
     FIND_IN_SET(total_score, 
        (SELECT GROUP_CONCAT(total_score 
              ORDER BY total_score ASC) 
         FROM score)) AS rank 
FROM score 
INNER JOIN users ON score.user_id = users.user_id 
WHERE score.total_score > 15 
ORDER BY score.total_score DESC LIMIT 10 

Покушение - 2

SET @Rank := 0; 
SELECT score.total_score,score.time, 
     CONCAT(users.user_first_name,' ', users.user_last_name) AS name, 
     users.user_email, 
     @Rank := @Rank + 1 AS rank 
FROM score 
INNER JOIN users ON score.score_id = users.user_id 
WHERE score.total_score > 15 
ORDER BY score.total_score DESC, time ASC LIMIT 10 

Обе попытки потерпели неудачу, короче говоря, что я пытался сделать это,

оценки пользователей Ранг по to total_score, учитывая время (есть вероятность иметь одинаковые оценки).

Заранее спасибо.

+1

Как вы присоединяетесь к «score_id» и «user_id»? Разве это не должно быть «ON score.user_id = users.user_id»? – Indrajit

+0

1. См. Нормализацию. 2. Нормализовать вашу схему. – Strawberry

+0

Идентификатор очень рекомендуется удалить столбцы для уровня 2 до 4. И добавив новый столбец «Уровень». Просто установите уровень там и счет. Таким образом, это не имеет значения, если у вас есть 2 уровня или 900 уровней. – ThrowingDwarf

ответ

0

Вы можете попробовать это. ORDER BY (score.total_score/score.time)

SET @Rank := 0; 
SELECT score.total_score, score.time, 
     CONCAT(users.user_first_name,' ', users.user_last_name) AS name, 
     users.user_email, 
     (@Rank := @Rank + 1) AS rank 
FROM score 
INNER JOIN users ON score.user_id = users.user_id 
WHERE score.total_score > 15 
ORDER BY (score.total_score/score.time) ASC LIMIT 10 
+0

Спасибо, но он не работает: http://www.tiikoni.com/tis/view/?id=f46a498 – Nikhil

+0

Что значит, что он не работает? Это отсортировано. или вы хотите, чтобы поле 'rank' также было исправлено? – rmondesilva

+0

Поле ранга не фиксировано. – Nikhil

Смежные вопросы