Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1
Здравствуйте многоуважаемые!
Есть таблица истории побед в игре
CREATE TABLE IF NOT EXISTS `championat_history` (
`uid` int(11) NOT NULL,
`id` int(11) NOT NULL,
`status` int(11) NOT NULL,
`time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'время записи',
`reopen` int(11) NOT NULL,
UNIQUE KEY `uid` (`uid`,`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
и еще есть таблица с именами и аватарами пользователей
CREATE TABLE IF NOT EXISTS `championat_users` (
`uid` int(11) NOT NULL,
`ava` int(11) NOT NULL,
`name` varchar(200) CHARACTER SET utf8 NOT NULL DEFAULT 'Некий пользователь',
PRIMARY KEY (`uid`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Есть рабочая ВЫБОРКА (спасибо evgeny)
которая выводит id, имя, аватар, рейтинг за эту неделю, рейтинг за прошлую неделю, позицию на этой неделе, позицию на той неделе и общее количество ответов
SELECT
`all`.uid AS uid,`names`.name,`names`.ava,`all`.cnt AS rate1,`exclude_today`.cnt AS rate2, `all`.pos AS pos1, `exclude_today`.ed_pos AS pos2,`allks`.ks AS ks
FROM
(SELECT a.*,(@pos:=@pos+1) pos FROM
(SELECT uid,COUNT(uid) cnt FROM championat_history WHERE `status`=1 AND YEAR(`time`)=YEAR(NOW()) AND week(`time`)=week(NOW()) GROUP BY uid ORDER BY COUNT(uid)+ABS(uid/1000000000) DESC) a,(select @pos:=0) z
) `all`
LEFT JOIN
(SELECT a.* FROM
(SELECT COUNT(uid) ks,uid FROM championat_history WHERE YEAR(`time`)=YEAR(NOW()) AND week(`time`)=week(NOW()) GROUP BY uid ORDER BY ks DESC) a
) `allks` ON(all.uid=`allks`.uid)
LEFT JOIN
(SELECT a.*,(@ed_pos:=@ed_pos+1) ed_pos FROM
(SELECT COUNT(uid) cnt,uid FROM championat_history WHERE `status`=1
AND YEAR(`time`)=YEAR(NOW()-INTERVAL 1 week) AND week(`time`)=week(NOW()-INTERVAL 1 week) GROUP BY uid ORDER BY cnt DESC) a,(select @ed_pos:=0) z
) `exclude_today` ON(all.uid=`exclude_today`.uid)
LEFT JOIN
(SELECT uid,name,ava from championat_users)`names` ON(all.uid=`names`.uid)
limit 0,10
ПРОБЛЕМА в том что она выбирает список сортируя по рейтингу за текущую неделю (rate1)
и при этом получается что если у 2 человек одинаковый рейтинг то путаница в позиции в таблице (то одного покажет то другого)
Прошу помочь сделать выборку сортируя не только по рейтингу недели (rate1) но и ПЛЮС к этому по количеству ответов (`allks`.ks)
чтобы тот у кто набрал 20 очков за 10 ходов был выше чем тот кто набрал 20 очков за 11 ходов
СПАСИБО! очень надеюсь на вашу помощь
Неактивен
Если я вас правильно понял, то вам нужно просто отсортировать ?
Отредактированно evgeny (12.12.2011 16:04:50)
Неактивен
В том то и загвоздка, что при таком методе сортировки ( в конце запроса rate1,ks DESC)
получается что те у кого рейтинг меньше - отображаются вначале... см. прикрепленный скрин
Отредактированно Фяшя (12.12.2011 16:42:50)
Неактивен
Опечатка :-)
rate1 DESC,ks DESC
Неактивен
Страниц: 1