Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

gremio10

Deixar query pré programada

Recommended Posts

Fala pessoal, fiquei com essa duvida se é possivel, tipo, no meu banco eu tenho datas de bloqueios que duram até 2 dias, e queria fazer uma verificação diária se ele ainda continua bloqueado ou se não, caso não ele vai mudar o campo liberated de 0 para 1.

 

Alguem sabe se tem como ? Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tipo um CronJob nativo ao banco? Desconheço qualquer coisa nesse sentido.

 

Mas tipo, uma ação no próprio programa executada na primeira página a ser aberta pelo sistema (talvez a segunda se tiver autenticação) não resolveria?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Resolveria, só que eu queria ver se existe isso, por que além de salvar processo, pois digamos que mil usuários se loguem por dia, isso irá pedir muito do meu servidor, que pode cair, com tantos requests...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha só, posso fazer um SELECT, depois um IF e se cair no else fazer um UPDATE ?

Claro, você pode fazer um procedure para facilitar isso, já que em events não tem como

mas quais serão as condições ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

tipo, eu tentei assim:

 

DELIMITER $$
CREATE EVENT `coletivas`.`unblock`

ON SCHEDULE EVERY 1 DAY

DO
BEGIN
    UPDATE `products` SET `products`.`liberated` = 1 WHERE ( UNIX_TIMESTAMP( `products`.`block` ) - UNIX_TIMESTAMP( NOW() ) ) > 172800
END$$

DELIMITER ;

 

o que quero que ele faça, quando o

( UNIX_TIMESTAMP( `products`.`block` ) - UNIX_TIMESTAMP( NOW() ) ) > 172800

for maior que 2 dias, ele vai alterar o liberated de 0 para 1.

 

será que é isso que ele vai fazer ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok, então vamos ter o seguinte, um event que vai verificar os dias

se for maior que dois, altera tal valor pra 1, se não for, mantem em 0 certo ? onde o 'liberated' é 1 ?

 

eu acho que não vai precisar de procedure, pois você não vai passar nenhum parâmetro pra especificar algo.

 

tem como você mandar tua tabela com algum registro ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

assim, tenho o campo block, digamos

 

block

2011-06-21 10:10:10

 

quero saber se todos os registros que possuem o liberated for igual a 0 e hoje é 23 ele vai mudar para 1 o liberated, por que foi liberado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

hoje é 23

Hoje é 22 :P , ok, o produto vai estar gravado nesse formato, não precisa colocar

em timestamp, você pode fazer dessa forma:

CURRENT_TIMESTAMP + INTERVAL 2 DAY;

então vai achar todo mundo que estiver em '24' .. certo ?

 

mais ainda eu não entendi sua condição, o que você que fazer no IF.

Compartilhar este post


Link para o post
Compartilhar em outros sites

sim sim, hoje é 22, 23 foi um exemplo de quando ele deveria atualizar, mas beleza, não tinha pensado nessa possibilidade, o if eu fiquei louco pensando hehehe...

 

seria um select para pegar todos que tem 0 no liberated, um if se eles forem zero faz o update

Compartilhar este post


Link para o post
Compartilhar em outros sites

Que tenham sua data com 'intervalo' de 2 dias ?

Exemplo:

SELECT @data := `produtos`.`data` FROM `produtos` WHERE `produtos`.`liberated` = 0
AND `produtos`.`data` >= CURRENT_TIMESTAMP + INTERVAL 2 DAY;

Mudei o nome da tabela, porque estou testando aqui ..

 

então, pega todos esses produtos, e coloca liberado como 1 ?

;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, não precisa do IF Então, vamos ser razoáveis

CREATE EVENT `unblock` ON SCHEDULE EVERY 1 DAY STARTS '2011-06-22 12:33:56'
ON COMPLETION PRESERVE ENABLE
DO BEGIN
     UPDATE `produtos` SET `produtos`.`status` = '1' WHERE `produtos`.`status` = '0' 
     AND `produtos`.`data` > CURRENT_TIMESTAMP + INTERVAL 2 DAY;
END

 

Não esquece do:

SET GLOBAL event_scheduler = on

 

Para habilitar os eventos ..

 

pois digamos que mil usuários se loguem por dia, isso irá pedir muito do meu servidor, que pode cair, com tantos requests...

 

Cara, os bancos de dados que eu já trabalhei recebem em media 5 ~ 10 mil atualizações por mês

o MySQL não é uma caixinha de papelão que com o vento desmonta, o apache também aguenta bastante requisições

1000 usuários logados fazendo alterações, remoções não é 'pouco' mais também não é 'muito'

 

tudo depende da sua estrutura e como você manipula as coisas no servidor, porque se um banco de dados

não aguenta várias atualizações diárias, inserções, exclusões, então não vale de nada, tem empresa aí

que grava no minimo 1 milhão de registros por semana / mês .. fica na paz cara, o banco trabalha muito mais

rápido do que você pensa, também não podemos abusar de mais dele, colocando cargas inúteis ..

 

No dia que você trabalhar com Oracle ou algum banco de dados mais puxado, se é que já não trabalhou, você vai entender ..

 

;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

A rigor em modelagem de dados, normalizada. Esse campo, que é resultado de outro campo não deveria existir.

 

simples assim.

Estude Formas Normais.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.