Tive a necessidade de dar bônus de vip a players do meu servidor, então fiz a query meio que as pressas...
Tbm sei que não tem uma ferramenta que faz isso ainda, então vou liberar pra vocês.
Que fique claro uma coisa: A QUERY FUNCIONA.
Configurações do MEU SQL:
VIPS estão na tabela MEMB_INFO
Colunas PADRÕES, mas na MEMB_INFO, repito:
VIP
DateBegin
DateEnd
DateEndInteger
Não me responsabilizo por uso incorreto.
O script está todo comentado, se tiver um mínimo de conhecimento e paciência para ler, saberá como usar.
É isso, bom proveito.
Código:
-- SCRIPT CRIADO POR
-- RENATO VALER
-- 19/11/2012
-- 01:00 AM
/* DECLARANDO VARIÁVEIS */
DECLARE @TEMPO_VIP int; -- NÃO MEXA AQUI
DECLARE @VIP_TOTAL int; -- NÃO MEXA AQUI
DECLARE @BONUS_VIP int; -- NÃO MEXA AQUI
DECLARE @VIP_FOR_ACC_FREE int; -- NÃO MEXA AQUI
DECLARE @LOGINS varchar(12); -- NÃO MEXA AQUI
/************************************************/
/* INÍCIO DAS CONFIGURAÇÕES */
/************************************************/
/* DEFININDO DIAS DE VIP A SER DADO COMO BÔNUS */
SET @BONUS_VIP = 2; -- DIAS DE VIP A SER DADO COMO BÔNUS
/* DEFININDO TIPO DE VIP A SER DADO PARA CONTAS FREE*/
SET @VIP_FOR_ACC_FREE = 2; -- TIPO DE VIP A SER DADO PARA CONTAS FREE
/************************************************/
/* FIM DAS CONFIGURAÇÕES */
/************************************************/
/* DECLARANDO CURSOR DE CONTAS VIP */
DECLARE C_VIP CURSOR FOR -- NÃO MEXA AQUI
/* LISTANDO LOGINS VIP */
SELECT memb___id FROM [dbo].[Memb_Info] WHERE VIP > 0 -- NÃO MEXA AQUI
OPEN C_VIP; -- NÃO MEXA AQUI
FETCH NEXT FROM C_VIP INTO @LOGINS -- NÃO MEXA AQUI
WHILE(@@FETCH_STATUS = 0)BEGIN -- NÃO MEXA AQUI
/* SELECIONANDO TEMPO VIP RESTANTE DE CADA LOGIN */
SET @TEMPO_VIP = (SELECT DATEDIFF(day, GETDATE(), DATEADD(s, CAST([dateend] as int), '19700101')) -- NÃO MEXA AQUI
as [diasRestantes] FROM [dbo].[MEMB_INFO] WHERE [memb___id] = @LOGINS); -- NÃO MEXA AQUI
/* EXECUTANDO CÁLCULO */
SET @VIP_TOTAL = @TEMPO_VIP+@BONUS_VIP; -- NÃO MEXA AQUI
/* ATUALIZANDO DATA DE FIM DO VIP */
UPDATE [dbo].[MEMB_INFO] SET [dateEnd] = DATEDIFF(s, '19700101', GETDATE() + @VIP_TOTAL) WHERE [memb___id] = @LOGINS -- NÃO MEXA AQUI
/* ATUALIZANDO DATA DE FIM DO VIP EM NÚMEROS INTEIROS */
UPDATE [dbo].[MEMB_INFO] SET [dateEndInteger] = [dateEndInteger]+@VIP_TOTAL WHERE [memb___id] = @LOGINS -- NÃO MEXA AQUI
FETCH NEXT FROM C_VIP INTO @LOGINS; -- NÃO MEXA AQUI
END; -- NÃO MEXA AQUI
CLOSE C_VIP; -- NÃO MEXA AQUI
DEALLOCATE C_VIP; -- NÃO MEXA AQUI
/* DECLARANDO CURSOR DE CONTAS FREE */
DECLARE C_FREE CURSOR FOR -- NÃO MEXA AQUI
/* SELECIONANDO LOGINS DAS CONTAS FREE */
SELECT memb___id FROM [dbo].[Memb_Info] WHERE VIP = 0 -- NÃO MEXA AQUI
/* INICIANDO CURSOR DE CONTAS FREE */
OPEN C_FREE; -- NÃO MEXA AQUI
FETCH NEXT FROM C_FREE INTO @LOGINS -- NÃO MEXA AQUI
WHILE(@@FETCH_STATUS = 0)BEGIN -- NÃO MEXA AQUI
/* ATUALIZANDO DATA DE INÍCIO DO VIP */
UPDATE [dbo].[MEMB_INFO] SET [dateBegin] = DATEDIFF(s, '19700101', GETDATE()) WHERE [memb___id] = @LOGINS -- NÃO MEXA AQUI
/* ATUALIZANDO DATA DE FIM DO VIP */
UPDATE [dbo].[MEMB_INFO] SET [dateEnd] = DATEDIFF(s, '19700101', GETDATE() + @BONUS_VIP) WHERE [memb___id] = @LOGINS -- NÃO MEXA AQUI
/* ATUALIZANDO DATA DE FIM DO VIP EM NÚMEROS INTEIROS */
UPDATE [dbo].[MEMB_INFO] SET [dateEndInteger] = @BONUS_VIP, [VIP] = @VIP_FOR_ACC_FREE WHERE [memb___id] = @LOGINS -- NÃO MEXA AQUI
/* FINALIZANDO CURSOR DE CONTAS FREE */
FETCH NEXT FROM C_FREE INTO @LOGINS; -- NÃO MEXA AQUI
END; -- NÃO MEXA AQUI
CLOSE C_FREE; -- NÃO MEXA AQUI
DEALLOCATE C_FREE; -- NÃO MEXA AQUI
/* FIM DO SCRIPT */
USA AS CONFIGURAÇÕES ORIGINAIS DO DALDEGAM (DB WEBSITE)?
Código para quem usa a configuração padrão do daldegam, ISTO É:
Código PHP:
$TABLES_CONFIGS['WEBVIPS'] = array("database" => DATABASE, //webSite || MuOnline
"table" => "webVips", //webVips || MEMB_INFO
"columnUsername" => "username", //username || memb___id
"columnType" => "type", //type || vip
"columnDateBegin" => "dateBegin",
"columnDateEnd" => "dateEnd",
"columnDateEndInteger" => "dateEndInteger");
Código:
-- SCRIPT CRIADO POR
-- RENATO VALER
-- 19/11/2012
-- 01:00 AM
/* DECLARANDO VARIÁVEIS */
DECLARE @TEMPO_VIP int; -- NÃO MEXA AQUI
DECLARE @VIP_TOTAL int; -- NÃO MEXA AQUI
DECLARE @BONUS_VIP int; -- NÃO MEXA AQUI
DECLARE @VIP_FOR_ACC_FREE int; -- NÃO MEXA AQUI
DECLARE @LOGINS varchar(12); -- NÃO MEXA AQUI
/************************************************/
/* INÍCIO DAS CONFIGURAÇÕES */
/************************************************/
/* DEFININDO DIAS DE VIP A SER DADO COMO BÔNUS */
SET @BONUS_VIP = 2; -- DIAS DE VIP A SER DADO COMO BÔNUS
/* DEFININDO TIPO DE VIP A SER DADO PARA CONTAS FREE*/
SET @VIP_FOR_ACC_FREE = 2; -- TIPO DE VIP A SER DADO PARA CONTAS FREE
/************************************************/
/* FIM DAS CONFIGURAÇÕES */
/************************************************/
/* DECLARANDO CURSOR DE CONTAS VIP */
DECLARE C_VIP CURSOR FOR -- NÃO MEXA AQUI
/* LISTANDO LOGINS VIP */
SELECT username FROM [dbo].[webVips] WHERE type > 0 -- NÃO MEXA AQUI
OPEN C_VIP; -- NÃO MEXA AQUI
FETCH NEXT FROM C_VIP INTO @LOGINS -- NÃO MEXA AQUI
WHILE(@@FETCH_STATUS = 0)BEGIN -- NÃO MEXA AQUI
/* SELECIONANDO TEMPO VIP RESTANTE DE CADA LOGIN */
SET @TEMPO_VIP = (SELECT DATEDIFF(day, GETDATE(), DATEADD(s, CAST([dateend] as int), '19700101')) -- NÃO MEXA AQUI
as [diasRestantes] FROM [dbo].[webVips] WHERE [username] = @LOGINS); -- NÃO MEXA AQUI
/* EXECUTANDO CÁLCULO */
SET @VIP_TOTAL = @TEMPO_VIP+@BONUS_VIP; -- NÃO MEXA AQUI
/* ATUALIZANDO DATA DE FIM DO VIP */
UPDATE [dbo].[webVips] SET [dateEnd] = DATEDIFF(s, '19700101', GETDATE() + @VIP_TOTAL) WHERE [username] = @LOGINS -- NÃO MEXA AQUI
/* ATUALIZANDO DATA DE FIM DO VIP EM NÚMEROS INTEIROS */
UPDATE [dbo].[webVips] SET [dateEndInteger] = [dateEndInteger]+@VIP_TOTAL WHERE [username] = @LOGINS -- NÃO MEXA AQUI
FETCH NEXT FROM C_VIP INTO @LOGINS; -- NÃO MEXA AQUI
END; -- NÃO MEXA AQUI
CLOSE C_VIP; -- NÃO MEXA AQUI
DEALLOCATE C_VIP; -- NÃO MEXA AQUI
/* DECLARANDO CURSOR DE CONTAS FREE */
DECLARE C_FREE CURSOR FOR -- NÃO MEXA AQUI
/* SELECIONANDO LOGINS DAS CONTAS FREE */
SELECT username FROM [dbo].[webVips] WHERE type = 0 -- NÃO MEXA AQUI
/* INICIANDO CURSOR DE CONTAS FREE */
OPEN C_FREE; -- NÃO MEXA AQUI
FETCH NEXT FROM C_FREE INTO @LOGINS -- NÃO MEXA AQUI
WHILE(@@FETCH_STATUS = 0)BEGIN -- NÃO MEXA AQUI
/* ATUALIZANDO DATA DE INÍCIO DO VIP */
UPDATE [dbo].[webVips] SET [dateBegin] = DATEDIFF(s, '19700101', GETDATE()) WHERE [username] = @LOGINS -- NÃO MEXA AQUI
/* ATUALIZANDO DATA DE FIM DO VIP */
UPDATE [dbo].[webVips] SET [dateEnd] = DATEDIFF(s, '19700101', GETDATE() + @BONUS_VIP) WHERE [username] = @LOGINS -- NÃO MEXA AQUI
/* ATUALIZANDO DATA DE FIM DO VIP EM NÚMEROS INTEIROS E TORNANDO A CONTA VIP*/
UPDATE [dbo].[webVips] SET [dateEndInteger] = @BONUS_VIP, [type] = @VIP_FOR_ACC_FREE WHERE [username] = @LOGINS -- NÃO MEXA AQUI
/* FINALIZANDO CURSOR DE CONTAS FREE */
FETCH NEXT FROM C_FREE INTO @LOGINS; -- NÃO MEXA AQUI
END; -- NÃO MEXA AQUI
CLOSE C_FREE; -- NÃO MEXA AQUI
DEALLOCATE C_FREE; -- NÃO MEXA AQUI
/* FIM DO SCRIPT */