Есть ли способ получить фактический номер строки из запроса?
Я хочу иметь возможность упорядочить таблицу с именем league_girl по полю с именем score; и вернуть имя пользователя и фактическую позицию строки этого имени пользователя.
Я хочу ранжировать пользователей, чтобы я мог сказать, где находится конкретный пользователь, т.е. Джо занимает 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)
Как получено
... но, похоже, он не возвращает позицию строки.
Любые идеи?
Ответы:
Вы можете попробовать следующее:
Эта
JOIN (SELECT @curRow := 0)
часть позволяет инициализировать переменную, не требуя отдельнойSET
команды.Прецедент:
Тестовый запрос:
Результат:
источник
@curRow
, заменивJOIN
оператор запятой, например:FROM league_girl l, (SELECT @curRow := 0) r
ORDER BY
?источник
Вот структура шаблона, который я использовал:
А вот мой рабочий код:
источник
Вы также можете использовать
для инициализации переменной счетчика.
источник
@curRow
может все еще иметь значение с момента последнего выполнения этого запроса в текущем сеансе.Предполагая, что MySQL поддерживает это, вы можете легко сделать это с помощью стандартного подзапроса SQL:
Для большого количества отображаемых результатов это будет немного медленным, и вы захотите вместо этого переключиться на самостоятельное соединение.
источник
Если вы просто хотите узнать позицию одного конкретного пользователя после упорядочения по количеству полей, вы можете просто выбрать всю строку в своей таблице, где оценка поля выше, чем текущая оценка пользователя. И используйте номер строки, возвращенный + 1, чтобы узнать, какая позиция этого текущего пользователя.
Предполагая, что ваша таблица
league_girl
и ваше основное поле естьid
, вы можете использовать это:источник
Я нашел исходный ответ невероятно полезным, но я также хотел получить определенный набор строк на основе номеров строк, которые я вставлял. Таким образом, я заключил весь исходный ответ в подзапрос, чтобы я мог ссылаться на номер строки, которую я вставлял.
Наличие подзапроса в подзапросе не очень эффективно, поэтому стоит проверить, получите ли вы лучший результат, если ваш SQL-сервер обработает этот запрос, или извлечет всю таблицу и заставит приложение / веб-сервер манипулировать строками после факта .
Лично мой SQL-сервер не слишком загружен, поэтому было предпочтительнее обрабатывать вложенные подзапросы.
источник
Я знаю, что OP просит
mysql
ответа, но поскольку я обнаружил, что другие ответы не работают для меня,order by
Поэтому, чтобы сэкономить время для таких, как я, просто проиндексируйте строку после получения их из базы данных.
пример в PHP:
пример в PHP с использованием смещения и ограничения для разбиения по страницам:
источник