Я буду рад за тот день, когда MySQL 5x полностью вытеснен MySQL8 + и есть реальные оконные функции в MySQL.Однако до этого дня для MySQL 5x / MariaDB <10.2 вы можете использовать что-то вроде: </p>
SELECT username
, progress_percent
, gold_count
, @uRank := @uRank + 1 AS theRank
FROM mytable t, ( SELECT @uRank := 0 ) r
ORDER BY progress_percent DESC, gold_count DESC, modify_date DESC
EDIT: очевидно, что функции окна не добавлялись в MariaDB до 10.2.: -S
Если бы вы использовали MySQL 8+ или MariaDB 10.2+, вы можете просто использовать функцию окна рейтинга:
SELECT username
, progress_percent
, gold_count
, ROW_NUMBER() OVER (ORDER BY progress_percent DESC, gold_count DESC, modify_date DESC ) AS theRank
FROM mytable t
ORDER BY theRank
РЕДАКТИРОВАТЬ 2:
Для конкретного пользователя просто поместите вышеупомянутые запросы в подзапрос и SELECT
Rank
, который вы хотите.
SELECT s1.username, s1.progress_percent, s1.gold_count
FROM (
[above query here]
) s1
WHERE s1.theRank = <theRankYouWant>
или
WHERE s1.username = <theUsernameYouWant>