Номер строки MySQL с ORDER BY - PullRequest
       2

Номер строки MySQL с ORDER BY

0 голосов
/ 02 сентября 2018

Прямо сейчас у меня есть это:

SELECT
@rownum := @rownum + 1 AS rownum,
T1.*
FROM
(
    SELECT user.username, points
    FROM scores
    JOIN users AS user ON user.id = scores.user_id
) AS T1, (SELECT @rownum := 0) AS r
ORDER BY T1.points DESC, rownum ASC

И это возвращает имена пользователей, точки и номер строки. Очки упорядочены, но номера строк перепутаны. Если я добавлю ORDER BY во вложенное выделение, то строки будут упорядочены, а точки - нет. Так что мне нужно изменить так, чтобы я получал очки, упорядоченные в порядке убывания, а номер строки был бы в порядке возрастания, я хочу создать списки лидеров, чтобы пользователь набирал больше всего очков первым и т. Д.

mysql return

Ответы [ 2 ]

0 голосов
/ 02 сентября 2018

Делает ли это то, что вы хотите?

SELECT (@rownum := @rownum + 1) AS rownum,
       us.*
FROM (SELECT u.username, s.points
      FROM scores s JOIN
           users u
           ON u.id = s.user_id
      ORDER BY s.points DESC
     ) us CROSS JOIN
     (SELECT @rownum := 0) params;

По сути, это просто оставляет порядок в подзапросе.

Если points не число, то используйте ORDER BY (s.points + 0) DESC в подзапросе. Или исправьте данные так, чтобы они сохранялись в виде числа.

0 голосов
/ 02 сентября 2018

Похоже, вам нужно, чтобы ваш rownum был в паре с points, который был предварительно заказан. Следовательно, вам нужно переместить ORDER BY на points во вложенный выбор:

SELECT
@rownum := @rownum + 1 AS rownum,
T1.*
FROM
(
    SELECT user.username, points
    FROM scores
    JOIN users AS user ON user.id = scores.user_id
    ORDER BY points DESC
) AS T1, (SELECT @rownum := 0) AS r
ORDER BY rownum ASC
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...