Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Получении позиции нужной записи в выборке mysq, Получении позиции нужной записи в выборк 
:(
    Опции темы
Baltazar5000
Дата 9.9.2009, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 6.12.2006

Репутация: нет
Всего: нет



Имеется таблица с полями:

id users rayting
1   aaa     0.1
2   bbb     0.3
3   vvv     0.2
4   ddd     1.0
5   sss     0
..   ...        ...


Идёт сортировка по рейтингу (SELECT * FROM top ORDER BY rayting DESC). Как узнать допустим положение "bbb" в этом рейтинге?

Это сообщение отредактировал(а) Baltazar5000 - 9.9.2009, 23:12
PM MAIL   Вверх
gcc
Дата 10.9.2009, 03:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 3
Всего: 17



Код

                                        SELECT count(*)+1 AS position
                              FROM content AS t1
                        LEFT JOIN content AS t2
                                 ON t1.id_co = ' . $loop_data2->{id_co} . ' 
                                AND t1.vo_all_co < t2.vo_all_co
                             WHERE t2.id_co IS NOT NULL'

PM WWW ICQ Skype GTalk Jabber   Вверх
Baltazar5000
Дата 10.9.2009, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 6.12.2006

Репутация: нет
Всего: нет



Спасибо! Написал вот так, но он присваивает всем одинаковым рейтингам одно место, что ни есть хорошо. Может есть более быстрый и удобный способ?
Код

SELECT count(*)+1 AS position
FROM top AS t1
LEFT JOIN top AS t2
ON t1.user = 'bbb' 
AND t1.rayting < t2.rayting
WHERE t2.id IS NOT NULL


Это сообщение отредактировал(а) Baltazar5000 - 10.9.2009, 10:24
PM MAIL   Вверх
gcc
Дата 10.9.2009, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 3
Всего: 17



я не тестировал, но вот

Код

select tmp.position
from (select row_number() over(order by pole desc) as position, id from rating) as tmp
where tmp.id = 2


вот если рейтинг в реальном времени, то ест ьвывести за какое-то время и bbb записей может быть несколько

Код

SELECT rownum FROM (SELECT @rownum:=@rownum+1 rownum, id_co FROM (SELECT @rownum:=0) r,
 (SELECT count(*) cnt, id_co FROM tablename GROUP BY id_co ORDER BY cnt DESC) t1) t2 WHERE t2.id_co=id_того,что нужно 


только я не знаю как оно будет если одинаковое количество голосов...

Это сообщение отредактировал(а) gcc - 10.9.2009, 10:49
PM WWW ICQ Skype GTalk Jabber   Вверх
Baltazar5000
Дата 10.9.2009, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 70
Регистрация: 6.12.2006

Репутация: нет
Всего: нет



Не получается(((
PM MAIL   Вверх
gcc
Дата 11.9.2009, 05:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 3
Всего: 17



Цитата

Может есть более быстрый и удобный способ?


а чем первый вариант не нравиться? тебе в любом случае нужно продсчитать позицию! если я не ошибаюсь....
поставить индексы

можно написать архитекруту работы при котором позиция будет подсчитываться сразу после голосования...

PM WWW ICQ Skype GTalk Jabber   Вверх
sTa1kEr
Дата 23.9.2009, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 7
Всего: 146



Код

SET @i:=0;
SELECT @i:=@i+1 AS position, t.* FROM top AS t ORDER BY t.rayting DESC;


Добавлено через 46 секунд
Это, естественно, два запроса.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0444 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.