За последние 24 часа нас посетили 22844 программиста и 1246 роботов. Сейчас ищут 786 программистов ...

Номер в рейтинге

Тема в разделе "MySQL", создана пользователем IvanKut, 4 окт 2020.

  1. IvanKut

    IvanKut Активный пользователь

    С нами с:
    27 июл 2018
    Сообщения:
    258
    Симпатии:
    0
    Всем привет.
    У меня есть таблица с userID, rating - где рейтинг это бал, а позиция в очереди определяется order by rating.
    Вопрос как получить позицию(порядковый номер) для выборки с определенным userID?
    То есть задача сказать - ваша позиция в очереди #5
    Приходит на ум костыль перебирать через while() в php но мне кажется есть способ проще.
     
  2. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
  3. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.824
    Симпатии:
    738
    Адрес:
    Татарстан
    Получить кол-во элементов ДО искомого,тогда ваша позиция кол-во+1

    Код (Text):
    1. select count(i)+1 as position from table where rating< you_rating
     
  4. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.076
    Симпатии:
    1.237
    Адрес:
    там-сям
    нейминг полей фиговый :) рейтинг это не рейтинг. можно было назвать баллы, например, 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)
     
  5. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.824
    Симпатии:
    738
    Адрес:
    Татарстан
    Ну это мелочи.... Главное направление задано