С MySQL, как я могу генерировать столбец, содержащий рекордный индекс в таблице?

Есть ли какой-либо способ, которым я могу получить фактический номер строки от запроса?

Я хочу смочь заказать таблицу, названную league_girl полем, названным счетом; и возвратите имя пользователя и фактическое положение строки того имени пользователя.

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

User Score Row
Joe  100    1
Bob  50     2
Bill 10     3

Я видел несколько решений на здесь, но я судил большинство из них, и ни один из них на самом деле не возвращает номер строки.

Я попробовал это:

SELECT position, username, score
FROM (SELECT @row := @row + 1 AS position, username, score 
       FROM league_girl GROUP BY username ORDER BY score DESC) 

Как получено

... но это, кажется, не возвращает положение строки.

Какие-либо идеи?

99
задан einpoklum - reinstate Monica 19 December 2013 в 12:38
поделиться

2 ответа

Вы можете попробовать следующее:

SELECT  l.position, 
        l.username, 
        l.score,
        @curRow := @curRow + 1 AS row_number
FROM    league_girl l
JOIN    (SELECT @curRow := 0) r;

Часть JOIN (SELECT @curRow: = 0) позволяет инициализировать переменную без необходимости отдельного SET команда.

Тестовый пример:

CREATE TABLE league_girl (position int, username varchar(10), score int);
INSERT INTO league_girl VALUES (1, 'a', 10);
INSERT INTO league_girl VALUES (2, 'b', 25);
INSERT INTO league_girl VALUES (3, 'c', 75);
INSERT INTO league_girl VALUES (4, 'd', 25);
INSERT INTO league_girl VALUES (5, 'e', 55);
INSERT INTO league_girl VALUES (6, 'f', 80);
INSERT INTO league_girl VALUES (7, 'g', 15);

Тестовый запрос:

SELECT  l.position, 
        l.username, 
        l.score,
        @curRow := @curRow + 1 AS row_number
FROM    league_girl l
JOIN    (SELECT @curRow := 0) r
WHERE   l.score > 50;

Результат:

+----------+----------+-------+------------+
| position | username | score | row_number |
+----------+----------+-------+------------+
|        3 | c        |    75 |          1 |
|        5 | e        |    55 |          2 |
|        6 | f        |    80 |          3 |
+----------+----------+-------+------------+
3 rows in set (0.00 sec)
170
ответ дан 24 November 2019 в 05:00
поделиться
SELECT @i:=@i+1 AS iterator, t.*
FROM tablename t,(SELECT @i:=0) foo
37
ответ дан 24 November 2019 в 05:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: