Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.05.2013, 23:31   #1
RuVarez
Форумчанин
 
Аватар для RuVarez
 
Регистрация: 25.08.2010
Сообщений: 258
По умолчанию Получить лучшее достижение

Всем привет. Сразу к делу:
Есть запрос:
Код:
select
    ach.ach_id as ach_id
from
    stat
    
    join achievements ach
        on ach.ach_stat_type = stat.st_type and
	ach.ach_stat_value <= stat.st_value and
	stat.st_player_id = $PlayerId
where
    ach_id not in 
    (
        select
            pa_ach_id
	from
	    players_achievements
	where
	    pa_player_id = $PlayerId
    )
Этот запрос возвращает достижения (ачивки) которые должен получить игрок за его статистику (stat).

Это пролог. Сама задача: получить из этого результата лучшие ачивки по каждой категории (ach_stat_type).

Т.с. запрос возвращает:
Код:
ach_id    ach_stat_value    ach_stat_type

87          1                      1
98          5                      1
И нужно получить 98 т.к. для ее получение надо 5 очков (она лучше чем 87).

Последний раз редактировалось RuVarez; 14.05.2013 в 00:18.
RuVarez вне форума Ответить с цитированием
Старый 14.05.2013, 08:46   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

А почему именно вторую запись? Потому что 98>87, или 5>1, или 98-5>87-1. От этого много зависит. В первом приближении соответствующий ORDER BY и TOP 1 или LIMIT (про СУБД ни слова не сказано)
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 14.05.2013, 23:14   #3
RuVarez
Форумчанин
 
Аватар для RuVarez
 
Регистрация: 25.08.2010
Сообщений: 258
По умолчанию

Нудно отобрать лучшие ачивки (те у которых max ach_stat_value в каждой категории).Т.с. еше один пример
Код:
ach_id    ach_stat_value    ach_stat_type

1           1                       1
2           5                       1
3           1                       2
4           1                       3
5           3                       3
Из этих отбираем 2, 3, 5 как лучшие по каждой ach_stat_type.
RuVarez вне форума Ответить с цитированием
Старый 15.05.2013, 08:41   #4
_SanR
Пользователь
 
Регистрация: 09.02.2013
Сообщений: 48
По умолчанию

Привет.
Пример с подзапросом на MS SQL

Код:
SELECT ach_id 
FROM Ach AS A
WHERE ach_stat_value = 
			(SELECT MAX(ach_stat_value)
			FROM Ach AS B
			WHERE B.ach_stat_type = A.ach_stat_type)
_SanR вне форума Ответить с цитированием
Старый 15.05.2013, 10:51   #5
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Код:
select ach_id from ach
inner join ( select max(ach_value) as ach_value, ach_type 
                 from stat group by ach_type 
            ) as mstat on mstat.ach_value=ach.ach_value and mstat.ach_type =ach.ach_type
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 15.05.2013, 22:59   #6
RuVarez
Форумчанин
 
Аватар для RuVarez
 
Регистрация: 25.08.2010
Сообщений: 258
По умолчанию

Так я и знал. Эти варианты, ребят, я знаю. Других я так понимаю не бывает да?
RuVarez вне форума Ответить с цитированием
Старый 15.05.2013, 23:03   #7
RuVarez
Форумчанин
 
Аватар для RuVarez
 
Регистрация: 25.08.2010
Сообщений: 258
По умолчанию

Код:
select ach_id from ach
inner join ( select max(ach_value) as ach_value, ach_type 
                 from stat group by ach_type 
            ) as mstat on mstat.ach_value=ach.ach_value and mstat.ach_type =ach.ach_type
Это не правильный запрос.
RuVarez вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Самое лучшее решение? Николай_Kolumb JavaScript, Ajax 0 25.04.2012 00:02
Складывание ячеек при достижение определенного значения Vladimir17M Microsoft Office Excel 6 08.02.2010 05:39