Есть ли какой-либо способ, которым я могу получить фактический номер строки от запроса?
Я хочу смочь заказать таблицу, названную 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)
Как получено
... но это, кажется, не возвращает положение строки.
Какие-либо идеи?
Вы можете попробовать следующее:
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)
SELECT @i:=@i+1 AS iterator, t.*
FROM tablename t,(SELECT @i:=0) foo