Товарищи!
Нужна ваша помощь.Вопрос может быть изрядно избитый, но я так и ничего не придумал.
Есть таблица
id user points
1 user1 42
2 user2 13
3 user2 13
4 user3 135
Как вывести пользователей с номерами рейтинга?
Т.е примерный вид будет такой
№1 user3 135
№2 user1 42
№3 user2 13
№3 user2 13
При этом интересует именно не сортировка, а проставление "места" напротив юзера относительно других.
@DmitriyEntelis@partyboy Обратите также внимание на то, что если, как в примере, обе записи с points=13 действительно должны получить одинаковое место (в примере 3), то это будет несколько сложнее и больше похоже на довольно таки грязненький хак без гарантии работоспособности в будущих версиях :) Тогда это было бы однозначно правильнее делать на стороне php.
@pi314@partyboy На самом деле я считаю что это всегда лучше делать на php. Во первых не вижу смысла грузить sql лишним функционалом, во вторых - вангую извращения когда надо будет делать пагинацию.
@zelenin Не лишним, а делать там, где такие вещи нужно делать :) На чистом SQL эта задача в принципе не решаема. Ее можно бы было "решить", полагаясь на некоторые особенности реализации переменных в MySQL, но это а. не переносится, б. не сопровождается и в. может вдруг перестать работать.
SET @prev=-1;
SET @rank=1;
SELECT @rank:=@rank+if(@prev > points,1,0) AS rank, user, @prev:=points
FROM users
ORDER BY points DESC;
Я специально не привожу это в качестве ответа, т.к. это - отвратительный костыль.
А ВОТ - статейка на эту тему. Там это преподностися, как великая мудрость... и оно, действительно, поучительно - разобраться с этим один раз... но только для того, чтоб НИКОГДА так не делать :)