Всем привет. У меня есть таблица с userID, rating - где рейтинг это бал, а позиция в очереди определяется order by rating. Вопрос как получить позицию(порядковый номер) для выборки с определенным userID? То есть задача сказать - ваша позиция в очереди #5 Приходит на ум костыль перебирать через while() в php но мне кажется есть способ проще.
Это называется нумерованным списком. Вот неплохая статья: https://www.internet-technologies.ru/articles/emulyaciya-funkcii-row-number-v-mysql.html
Получить кол-во элементов ДО искомого,тогда ваша позиция кол-во+1 Код (Text): select count(i)+1 as position from table where rating< you_rating
нейминг полей фиговый рейтинг это не рейтинг. можно было назвать баллы, например, score а рейтинг (позицию) rating знак надо поменять на ">" ... это работает пока нет одинакового числа баллов у разных записей. допустим, у меня 20 баллов, а у тех кто круче меня 40 и 30. я какбы на 3-м месте. Если у кого-то тоже 20, то на каком он месте? а тот, у кого 18 баллов на каком месте? заморочка. если допускать, что несколько участников могут делить одно и то же место, то формула такая: через больше или равно select count(i) as rating from table where score >= :you_score а если места должны быть уникальными, то можно решить, что при одинаковом количестве баллов побеждает тот, у кого id меньше, например. тогда формула такая: select count(i)+1 as rating from table where score > :you_score or (score = :you_score and id < :your_id)