Создание рейтинга

Статус
В этой теме нельзя размещать новые ответы.

Ad1ce

Постоялец
Регистрация
17 Авг 2009
Сообщения
109
Реакции
28
Предположим есть таблица с людьми, их описаниями, есть вторая таблица с двумя полями - id чувака и его рейтинг.
Как сделать так, чтобы при просмотре информации об чуваке показывалось, типа рейтинг 56 из 1435?
Я вижу тут только одно решение: создать еще одно поле в таблице рейтинга указывающее на текущее положение в рейтинге. Однако эта информация будет со временем устаревать, и придется делать очень часто перерасчет позиции в рейтинге. Есть ли более легкие решения? Можно ли сделать без создания еще одного поля, может через базу данных можно вычислить позицию в рейтинге?
 
Код:
SELECT COUNT(*)+1 FROM rating_table WHERE rating>=(SELECT rating FROM rating_table WHERE id=12345 LIMIT 1) AND id<12345
-- позиция человека в рейтинге
-- AND id=12345 в конце нужно, чтобы для людей с одинаковым рейтингом не показывало одну и ту же позицию
-- в таком виде каждый пользователь четко получит свое уникальное место
SELECT COUNT(*) FROM rating_table
-- всего позиций
десу
 
Работает, но только без последней части:AND id<12345.
С ней выдаются неожиданные результаты. Например при id=1737 выдает 1545, хотя на самом деле 3940.
Если же id=11, то выдает 2, хотя на самом деле -437 место
 
хм.затупил слегка
поправил. так вроде адекватно, как я описал должно работать
Код:
SELECT COUNT(*)+1 FROM rating_table WHERE
	rating>(SELECT rating FROM rating_table WHERE id=12345 LIMIT 1) OR 
	(rating=(SELECT rating FROM rating_table WHERE id=12345 LIMIT 1) AND id<12345)
 
При 4000 записей выполняется за 0,017, хотя мне всегда казалось что count + where+подзапросы долго исполняется, оказывается не так.
Простой, но изящный и полезный запрос.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху