Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Определение позиции в рейтинге.


Автор: xShinigami 18.4.2011, 14:13
Есть база данных

Код

CREATE TABLE IF NOT EXISTS `vote` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `vote` int(11) NOT NULL DEFAULT '0',
  `char_id` int(11) NOT NULL,
  `date` varchar(7) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=285 ;


vote - колчество голосов
char_id - персонаж за которого голосуют
date - месяц и год ("04-2011")

Определение позиции за текуший месяц есть, один запрос MySQL
Код

SELECT COUNT(DISTINCT `vote`)+1 as position FROM `vote` WHERE `vote` > (SELECT vote FROM vote WHERE `char`={$res['id']} and `date`='{$date}') ORDER BY vote ASC


Как определить позицию за все месяца которые есть в базе.

Если голосов за текущий месяц 10 а за прошлый месяц 20, то оно высчитывает также сумму голосов у всех остальных пользователей за каждый месяц и выводит позицию.
Как такое сделать чтоб затрачивалось меньше ресурсов и времени?

Автор: xShinigami 18.4.2011, 20:51
Кому интересно то
Код

SELECT `places`.* FROM (SELECT @row := @row + 1  as `place`, `summary`.`char` FROM 
(SELECT @index, `char` FROM `vote` GROUP BY `char` ORDER BY SUM(vote) DESC) as `summary`, 
(SELECT @row:=0) as `init`) as `places` WHERE `char`= //ид персонажа

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)