Postado originalmente por
dcvitoria
Bom, vamos fazer as coisas mais simples então...
Criação do campo pra armazenar o ranking semanal
Código:
use muonline
alter table Guild add score_semanal int NOT NULL default (0)
Criação da Trigger (que vai atualizar apenas o score semanal);
Código:
CREATE TRIGGER RankingSemanal
ON Guild
after update
as
IF UPDATE(g_score)
begin SET NOCOUNT ON;
update Guild set score_semanal=score_semanal+1
where g_name=(SELECT g_name FROM Inserted)
and g_score > 0
end
Criando a Job, coloque o Schedule dela para domingo as 23:59:59, e coloque semanal.
Aqui foi ctrl+c e ctrl+v do que estava no tópico, apenas coloquei mais uma informação ali embaixo no update, setando pra 0, o que não vai disparar a trigger novamente.
Código:
Declare @Guild varchar(10);
Declare @Char varchar(10);
Declare @Conta varchar(10);
Declare @Premio int;
Declare @G_Level int;
Set @Guild = (Select top 1 G_Name from Guild order by score_semanal desc)
IF (@Guild <> '')
BEGIN
DECLARE C CURSOR FOR SELECT Name,G_Level FROM GuildMember Where G_Name = @Guild Order By G_Level desc
OPEN C
FETCH NEXT FROM C INTO @Char,@G_Level
WHILE @@FETCH_STATUS = 0
BEGIN
IF @G_Level = 1 -- G_Level = 1 (Guild Master)
BEGIN
SET @Premio = 20;
END
IF @G_Level = 0 -- G_Level = 0 (Membro)
BEGIN
SET @Premio = 10;
END
SET @Conta = '';
SET @Conta = (Select AccountID From Character where Name = @Char)
IF (@Conta <> '')
BEGIN
Update DT_SHOP_CREDITS set credits = credits + @Premio where login = @Conta
END
FETCH NEXT FROM C INTO @Char,@G_Level
END
CLOSE C
DEALLOCATE C
update Guild set score_semanal=0
END
Creio que acabam-se todos os problemas.
O ruim de zerar a G_Score é que alguns sites e servidores personalizados podem usar essa pontuação pra algo. Da forma acima, fica simples de adaptar um ranking diário, mensal... sem mexer na estrutura já existente.
PS: Não testei.