gremio10 14 Denunciar post Postado Junho 22, 2011 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
Bruno Augusto 417 Denunciar post Postado Junho 22, 2011 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
gremio10 14 Denunciar post Postado Junho 22, 2011 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
Motta 645 Denunciar post Postado Junho 22, 2011 http://forum.imasters.com.br/topic/434310-executar-query-automaticamente/page__p__1714094__hl__job__fromsearch__1#entry1714094 Compartilhar este post Link para o post Compartilhar em outros sites
gremio10 14 Denunciar post Postado Junho 22, 2011 Olha só, posso fazer um SELECT, depois um IF e se cair no else fazer um UPDATE ? Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Junho 22, 2011 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
gremio10 14 Denunciar post Postado Junho 22, 2011 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
Andrey Knupp Vital 136 Denunciar post Postado Junho 22, 2011 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
gremio10 14 Denunciar post Postado Junho 22, 2011 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
Andrey Knupp Vital 136 Denunciar post Postado Junho 22, 2011 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
gremio10 14 Denunciar post Postado Junho 22, 2011 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
Andrey Knupp Vital 136 Denunciar post Postado Junho 22, 2011 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
gremio10 14 Denunciar post Postado Junho 22, 2011 Tranquilo, mas o que seria o @data ? Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Junho 22, 2011 Variável Compartilhar este post Link para o post Compartilhar em outros sites
gremio10 14 Denunciar post Postado Junho 22, 2011 SHOW!! e como faria o update ? Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Junho 22, 2011 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
William Bruno 1501 Denunciar post Postado Junho 22, 2011 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
gremio10 14 Denunciar post Postado Junho 22, 2011 Pô cara, valeu a dica, vou testar isso, e dou um retorno, mas mesmo assim, Obrigado. Compartilhar este post Link para o post Compartilhar em outros sites
Andrey Knupp Vital 136 Denunciar post Postado Junho 22, 2011 gremio10, você leu o que o William Bruno falou ? Compartilhar este post Link para o post Compartilhar em outros sites
gremio10 14 Denunciar post Postado Junho 22, 2011 Li sim, e não é um campo de outro campo, eu apenas quero saber quando passou dois dias, e dizer que ao invés de 0 é 1. Compartilhar este post Link para o post Compartilhar em outros sites