Задавайте вопросы, мы ответим
Вы не зашли.
Есть таблица истории побед в игре
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;
в ней
uid id status time время записи
42433684 18001 -1 2011-11-14 16:25:05
42433684 16662 -1 2011-11-14 16:26:18
42433684 774 1 2011-11-14 16:26:40
6157046 18215 -1 2011-11-14 16:33:35
6157046 2019 1 2011-11-14 16:33:39
Нужно вывести следующие данные для каждого пользователя
Баллы подсчитываются из ячейки status , учитывая только положительные значения (т.е. where status=1)
1) Пользователь
2) Имя
3) Аватар
4) Сумма баллов
5) место в таблице за все время
6) место в таблице не учитывая сегодня
7) Сумма баллов за неделю
8) место в таблице за эту неделю
9) место в таблице за прошлую неделю
10) Сумма баллов за месяц
11) место в таблице за этот месяц
12) место в таблице за прошлый месяц
11) Сумма баллов за год
12) место в таблице за этот год
13) место в таблице за прошлый год
То есть должна выводиться табличка с 13 ячейками и длинна регулироваться Limit`ом
Я неделю бьюсь над этим и уже почти обезнадежился.. Помогите ПЛИЗЗЗЗЗ!!!
Неактивен
Если Вы хотите сделать это всё одним запросом, то без подзапросов не обойтись.
Т.е. бежать по users и для каждого пользователя выбирать каждое поле отдельным
подзапросом.
Неактивен
Вот вам набросок с первыми примерами, дальше аналогично.
Отредактированно evgeny (22.11.2011 00:01:29)
Неактивен
Большое спасибо!
Но этот код возвращает только Набранные очки за все время, за все время кроме сегодня, за прошлую неделю...
НО не показывает как получать номера позиции в таблице ( то есть если он за неделю наборал больше всех баллов - то еще 1 ячейка нужна last_week_pos в которой будет 1 \*первое место*\)
Неактивен
Сделайте еще одну (временную?) табличку, в которую посчитайте места
людей за прошлую неделю / месяц. Одним подзапросом это уже не сделаешь.
Неактивен
Вот можно сделать по такому принципу.
Запрос не запускал, возможно есть синтаксические ошибки.
Отредактированно evgeny (22.11.2011 13:52:35)
Неактивен
Евгений! Спасибо огромное! Но данная конструкция (@pos:=@pos+1) выводит Рейтинговые позиции только для
alles (all_pos)
а надо еще week_pos , month_pos...
покажите пожалуйста пример с хотя бы двумя pos например (all_pos,exclude_today_pos )
Неактивен
Отредактированно evgeny (22.11.2011 23:36:35)
Неактивен
Evgeny, Спасибо милый человек! Очень ценю ваш труд и время потраченное вами на помощь мне.
Дай вам бог здоровья и благополучия!
Неактивен