Как узнать место в рейтинге?

Avenus

Under Glory Yield
Как узнать место в рейтинге?

Подскажите, пожалуйста, как узнать место в рейтинге данных находящихся в базе mysql?
Пример:
PHP:
id=1,rate=3
id=2,rate=1
id=3,rate=6
id=4,rate=2
id=5,rate=5
Вывести в порядке убывания "rate" без проблем, но это не нужно. Необходимо узнать какое место будет занимать определенный "id" при сортировке по убыванию "rate".
PHP:
1 место: id=2,rate=1
2 место: id=4,rate=2
3 место: id=1,rate=3
4 место: id=5,rate=5
5 место: id=3,rate=6
Т.е. id=1 занимает 3 место. Как сделать запрос к базе mysql, чтобы это узнать?
Спасибо!
 

Avenus

Under Glory Yield
Пытаюсь что-то вроде этого:
PHP:
$uid=NNN;
$i=1;
$ids=mysql_query('select id from table order by rate desc');
while($rate=mysql_fetch_assoc($ids)){
 if($rate['id']==$uid) break;
 $i++;
}
Место = $i;
Но это очень и крайне неудобно, т.к. идет запрос данных по id с выборкой многих параметров из таблицы "table" и left join из других таблиц. Нужно чтобы один из параметров для этого "id" и выбиралось место.
Как?
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
Avenus
вложенный запрос

-~{}~ 12.10.07 01:57:

Словами

Выбрать из таблицы значения rate которые <= (Запрос на получение значения rate по извесному АйДи.)

Ну или 2 запроса

Потом num_rows

-~{}~ 12.10.07 01:58:

Определитесь
с порядком сортировки по возрастанию или по убыванию... :D
 

Avenus

Under Glory Yield
C сортировкой я второй раз ошибся по ходу... но это не страшно :) место сверху или снизу - главное чтобы работало!
...
А насчет вложенного запроса?
Вы могли бы написать языком mysql, пожалуйста?
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
Avenus
Неужели нет НИМАЛЕЙШЕГО желания хоть попытаться?

-~{}~ 12.10.07 02:06:

Реализуйте для начала 2-мя запросами.
1. Получите значение рейта для извесного ай-ди
2. а потом
Выбрать из таблицы значения rate которые <=
(или >=
3. num_rows

-~{}~ 12.10.07 02:07:

Идея у ВАс есть. Дерзайте!
 

Avenus

Under Glory Yield
Запрос для $UID=NNN...
Вот мой запрос
PHP:
select t1.id,t1.name,t1.rate,t2.name as t2_name,t3.name as t3_name from t1 left join t2 on t2.uid=t1.id left join t3 on t3.uid=t1.id where t1.id='.$UID.' limit 1
Подскажите, пожалуйста, куда вставить вложенный запрос?
...
При выводе рейтинг = t1.rate... вот мне и необходимо узнать какое место это значение rate среди других rate в таблице t1 при сортировке rate по убыванию?

-~{}~ 12.10.07 03:15:

:) дерзаю... сижу и дерзаю, спасибо!
Как только получится, тогда успокоюсь...
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
Грубо говоря так
SELECT * FROM `a` WHERE `b`>=(SELECT `b` FROM `a` WHERE `a`='$id')

Для своего запроса, постарайтесь, пожалуйста, самостоятельно.
 

Avenus

Under Glory Yield
Конечно! :)
Спасибо!... буду пытаться

-~{}~ 12.10.07 03:32:

Вот второй запрос:
$RATING = t1.rate из предыдущего запроса
PHP:
$rates=mysql_query('select rate from t1 where rate>"'.$RATING.'" order by rate');
$i=1;
while($rate=mysql_fetch_assoc($rates)) $i++;
mysql_free_result($rates);
Место = $i
А можно ли все это в предыдущем запросе сразу сделать или нет?... или только в 2 отдельных запроса?
На хостинге ограничения во всем, и в колчестве запросов в час и в нагрузке...Постоянно приходится оптимизировать :)
 

trashcan

Новичок
если еще нужно, то так
PHP:
$uid = NNN; 
$rates = mysql_query("SELECT COUNT(id) FROM rates WHERE rate <= (SELECT rate FROM rates WHERE id = '$uid')");   
while($rate=mysql_fetch_row($rates)){  	
$mesto = $rate[0];  
}
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
trashcan
Дирол? Орбит?
 

trashcan

Новичок
Mr_Max
Если ты к тому, что я ничего нового не сказал, то это я и так знаю, просто уточнил и чуток упростил, чтоб понятнее было.
 

trashcan

Новичок
Автор оригинала: Mr_Max
не < а <=
точно, протупил :) тогда и косяка с несуществующим id не будет и единицу прибавлять не надо

-~{}~ 12.10.07 13:19:

В общем, опять я невнимательно прочитал. Действительно, все (а не как я думал "почти все") уже было сказано до меня. Просто не могу иногда удержаться. Обещаю в будущем исправиться.
 
Сверху