Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Узнать место в рейтинге
 
 автор: Max_Ivanov   (07.12.2009 в 22:31)   письмо автору
 
 

Здравствуйте скажите пожалуйста как узнать место (номер) позиции в каком-либо рейтинге при определенной сортировке?

Тут перерыл поиск в форуме нашел код Trianon'a
И написал по его принципу вот так

SELECT count(*) FROM bank WHERE bank_sum > (SELECT bank_sum FROM bank WHERE bank_user='USER');


все вроде бы нормально но проблема в том, что bank_sum не уникальное число.
Поэтому когда в базе несколько человек с числом 10 к примеру, то показывается одинаково для всех
Подскажите как можно узнать место в рейтинге, может каким-то иным кодом или доработать этот?

  Ответить  
 
 автор: Fractured#   (07.12.2009 в 22:43)   письмо автору
 
   для: Max_Ivanov   (07.12.2009 в 22:31)
 

> Поэтому когда в базе несколько человек с числом 10 к примеру, то показывается одинаково для всех

Так непонятно — тебе нужно так, чтобы с одним и тем же значением bank_sum разделяли место в рейтинге или нет?

  Ответить  
 
 автор: Max_Ivanov   (07.12.2009 в 23:01)   письмо автору
 
   для: Fractured#   (07.12.2009 в 22:43)
 

когда сумма одинаковая, там все равно как-то сортируется, и какое-то имя идет ниже или выше другого, вот нужно это учитывать, а как я не знаю

  Ответить  
 
 автор: Fractured#   (07.12.2009 в 23:27)   письмо автору
 
   для: Max_Ivanov   (07.12.2009 в 23:01)
 

Как-то так, возможно
SELECT COUNT(*) + 1 FROM
(
    SELECT 1 FROM `bank` WHERE `bank_sum` > ( SELECT `bank_sum` FROM `bank` WHERE `bank_user` = 'USER' ) GROUP BY `bank_sum`
) AS `tmp`;

  Ответить  
 
 автор: Trianon   (07.12.2009 в 23:30)   письмо автору
 
   для: Max_Ivanov   (07.12.2009 в 23:01)
 

>когда сумма одинаковая, там все равно как-то сортируется,

там - это где?

  Ответить  
 
 автор: Max_Ivanov   (07.12.2009 в 23:36)   письмо автору
 
   для: Trianon   (07.12.2009 в 23:30)
 

SELECT * FROM bank ORDER BY bank_sum DESC;

Те у кого число 10 как-то упорядочены, то есть идут по порядку, не в одном же значении выводятся те у кого сумма 10

  Ответить  
 
 автор: Trianon   (07.12.2009 в 23:42)   письмо автору
 
   для: Max_Ivanov   (07.12.2009 в 23:36)
 

но это не ранк.
и если bank_sum неуникален - этот запрос имеет право выдавать отличающиеся результаты.
В том-то и дело, что в пределах совпадающего bank_sumстроки не сортируются никак.
Т.е. выводятся неотсортированными.

  Ответить  
 
 автор: Max_Ivanov   (08.12.2009 в 00:27)   письмо автору
 
   для: Trianon   (07.12.2009 в 23:42)
 

то есть никак не получится узнать?

  Ответить  
 
 автор: Trianon   (08.12.2009 в 00:49)   письмо автору
 
   для: Max_Ivanov   (08.12.2009 в 00:27)
 

Ну как же объяснить-то, чтоб дошло...

Представьте себе, что у Вас в табличке две строки Вася и Петя. И у обоих по 10 очков. А первому приз назначен
И Вы выводите её так:
Ранг Имя  Очки 
   1 Вася 10
   2 Петя 10 


А потом приходит Петя и говорит: Макс, а чо это ты меня на второе место поставил?
И начинает так реально бить за это морду. Потому что ведь несправедливо, а?

Вам, однако, становится страшно. И Вы переделываете вывод вот так:
Ранг Имя  Очки 
   1 Петя 10
   2 Вася 10 


Но тут приходит Вася. И лупит в морду уже без разговоров.
Потому что ведь мало того что несправедливо, так еще человек над ошибками не работает, а?

И тут Вы конечно же...
То есть я надеюсь, что конечно...

Как?

  Ответить  
 
 автор: Max_Ivanov   (08.12.2009 в 03:01)   письмо автору
 
   для: Trianon   (08.12.2009 в 00:49)
 

Это понятно, а если выборка будет с сортировкой по двум полям
SELECT * FROM bank ORDER BY bank_sum DESC, bank_id ASC;

в данном случае можно ли узнать рейтинг ?
Я пытаюсь вставить но внутренний запрос никак не реагирует на сортировки
SELECT count(*) FROM bank WHERE bank_sum > (SELECT bank_sum FROM bank WHERE bank_user='USER' ORDER BY bank_sum DESC, bank_id ASC);


если копать в этом направлении безнадежно подскажите тогда как это сделать?

  Ответить  
 
 автор: Trianon   (08.12.2009 в 11:55)   письмо автору
 
   для: Max_Ivanov   (08.12.2009 в 03:01)
 

Вы видите, что пишете?

Получить количество строк, в которых значение поля bank_sum превышает
значение поля bank_sum остальных строк, отсортированных в определенном порядке.

Какая разница, в каком порядке сортировать строки для сравнения этих полей?
Число строк превышения bank_sum от порядка сортировки изменится чтоли?

Вводите рейтинговую функцию вроде bank_sum*1000000000.0+bank_id
По ней и определяйтесь.
Смысл такого рейтинга, правда, может спровоцировать воздействие на лицо... но об этом я уже предупредил.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования