узнать позицию значения после сортировки

MySQL/PostgreSQL/SQLite/Oracle/M$SQL/....

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
ProFTP
проходил мимо

узнать позицию значения после сортировки

Непрочитанное сообщение ProFTP » 2008-04-12 8:41:38

есть таблица для рейтинга

Код: Выделить всё

id | name | pole|
------------------|
1	a	   20
2	b	   30	|
3	c	   10
----------------- |

нужно отсортировать к убыванию и написать на каком "месте" id 2

пробовал COUNTE, но не получаеться определить в какой позиции значение id ... как сделать?

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
BlackCat
прапорщик
Сообщения: 469
Зарегистрирован: 2007-10-16 22:40:42

Re: узнать позицию значения после сортировки

Непрочитанное сообщение BlackCat » 2008-04-13 17:10:07

Если в лоб, то SELECT'ом забираем id из отсортированной таблицы и уже внутри программы определяем положение записи с нужным id в таблице.

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: узнать позицию значения после сортировки

Непрочитанное сообщение ProFTP » 2008-04-13 20:22:50

Код: Выделить всё

SELECT count(*)+1 FROM `table` AS t1
LEFT JOIN `table` AS t2
ON t1.id=$id AND t1.pole < t2.pole
where t2.id IS NOT NULL
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

Аватара пользователя
hizel
дядя поня
Сообщения: 9032
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: узнать позицию значения после сортировки

Непрочитанное сообщение hizel » 2008-04-16 8:23:59

Код: Выделить всё

select id from table order by pole desc limit 1;
если я конечно правильно понел чт ты хочешь
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: узнать позицию значения после сортировки

Непрочитанное сообщение ProFTP » 2008-04-16 9:43:20

извините, если я не правильно сформулировал вопрос, потому что сформулировать было не легко!!!

нет я хотел не это, а не много сложнее

у меня есть id 2
нужно отсортировать к убыванию и написать на каком "месте" id 2

работает вот так:

Код: Выделить всё

SELECT count(*)+1 FROM `table` AS t1
LEFT JOIN `table` AS t2
ON t1.id=$id AND t1.pole < t2.pole
where t2.id IS NOT NULL
в DB2

Код: Выделить всё

select tmp.position
from (select row_number() over(order by pole desc) as position, id from rating) as tmp
where tmp.id = 2
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: узнать позицию значения после сортировки

Непрочитанное сообщение zg » 2008-04-16 17:28:21

можно сделать с помощью временной таблицы
1. заполняешь временную таблицу в порядке рейтинга
2. обновляешь номера позиций строк
3. выбираешь нужную строку, позиция в рейтинге уже будет вычислена


на мускуле я бы использовал автоинкремент, сократив число запросов

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: узнать позицию значения после сортировки

Непрочитанное сообщение ProFTP » 2008-04-16 23:03:27

ну там таблица не маленькая, это нужно ее всю отсортировать занести в хэш, и потом во всей таблице все значение обновить? (это не замедлит работу сильно? или как обновить?)
если я правильно понял...

спасибо, попробую :P
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

zg
полковник
Сообщения: 5845
Зарегистрирован: 2007-12-07 13:51:33
Откуда: Верх-Нейвинск

Re: узнать позицию значения после сортировки

Непрочитанное сообщение zg » 2008-04-18 10:43:33

ProFTP писал(а):(это не замедлит работу сильно? или как обновить?)
если я правильно понял...

спасибо, попробую :P
если только таблица весит метр и более, а так нет