Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bom, estou com um problema pois não entendi ainda como utilizar as tarefas Cron..
Estou utilizando hospedagem da locaweb onde eles tem agendador de tarefas cron, mas nao entendi ainda como automatizar isso para utilizar em meu sistema.
Estou cadastrando uns EVENTOS em uma AGENDA que desenvolvi em php.
Eu gostaria de DESATIVAR ou ALTERAR uma Query de acordo com a data do campo "EXPIRA".
Vamos supor que no site eu estou exibindo apenas as linhas que contem o campo ATIVA = 1.
Gostaria de mudar este campo para ATIVA = 0 no dia do campo EXPIRA. Sem eu ter que ir la manualmente e mudar entende?
Se excluir essa linha for mais facil, serve também.. Tanto mudar o ATIVA para 0 como também excluir essa linha inteira na exata data do campo "EXPIRA".
Alguem sabe? Obrigado
>
Opa, boa tarde.
Pelo que entendi, vc tem um campo com uma data limite de algo e, além deste campo, um outro campo com uma flag (campo booleano) ativo (1 ou 0)
Pelo que posso perceber, esses dois campos basicamente tem a mesma função, ou seja o campo ativo só irá para 0 quando a data do campo expira for menor que a data atual, certo?
Enfim, acredito q não existe a necessidade de vc ter esses 2 campos, talvez seja mais fácil vc mudar o seu select para analisar a data do campo expira: SE a data do campo expira for menor que a data atual, não le o registro, ficando assim:
SELECT [campos] FROM [tabela] WHERE expira > SYSDATE() AND [... demais condições]
http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_sysdate
Caso o seu campo expira possa ser nulo (algo como nunca expira), a query ficaria
SELECT [campos] FROM [tabela] WHERE (expira > SYSDATE() OR expira is null) AND [... demais condições]
Perceba o "parêntesis"...ele faz uma grande diferença...
Com relação ao CRON, se realmente for necessário ou vc não concordar com essa solução que lhe passei, o que vc precisaria seria analisar de x em x tempo se tem algum registro com o campo expirado, e se existir, atualizar o campo para ativo=0
UPDATE [tabela] SET ativo = 0 WHERE expira < sysdate()
*** O mesmo conceito para o delete do registro.
O cron iria te ajudar justamente nisso: ele determinaria a frequencia que vc iria chamar o seu script para update do registro.
Enfim, espero ter sido claro nas explicações...
Olá amigo!
Achei bem interesse essa parte do SELECT com SYSDATE. Nunca havia ouvido falar. Só não entendi muito bem como utilizar no meu caso..
No meu site, na parte de agenda, eu utilizo o seguinte:
mysql_query("SELECT * FROM agenda WHERE ativo = 1 ORDER BY ano DESC, mes DESC, dia DESC");
Dessa forma, eu faço com que a agenda se ordene pelas proximas datas, pois em meu banco eu tenho , para data, os campos: dia (varchar), mes (varchar), ano (varchar) e expira (date) que contem a mesma data dos outros 3 campos unidos ($ano-$mes-$dia).
Como eu poderia utilizar o SYSDATE nesse caso?
mysql_query("SELECT * FROM agenda WHERE expira > SYSDATE() ORDER BY ano DESC, mes DESC, dia DESC");
como seria exatamente?
Obrigado!!
Não consegui resolver ainda..
Exemplo da minha tabela:
id 1
dia 28
mes 01
ano 2013
expira 2013-01-28
endereco Rua exemplo, 200
Se hoje, por exemplo, é dia 28/01/2013.. Eu preciso mostrar apenas os registros onde EXPIRA seja MAIOR que essa data, ou seja, a frente de 2013-01-28.. Se tiver algum 2013-01-27, não deverá mostrar..
Isso é possível?
Como devo fazer?
$qry = mysql_query("SELECT * FROM agenda ORDER BY ano ASC, mes ASC, dia ASC LIMIT 10");
Aguardo respostas, obrigado!
Resolvi da seguinte maneira:
Na página de agenda de shows do meu site, eu captei o dia de hoje em variaveis e joguei no SELECT, da seguinte forma:
$hoje = date("Y-m-d");
$qry_agenda = mysql_query("SELECT * FROM agenda WHERE expira >= DATE('$hoje') ORDER BY ano ASC, mes ASC, dia ASC");
Opa, boa tarde.
Pelo que entendi, vc tem um campo com uma data limite de algo e, além deste campo, um outro campo com uma flag (campo booleano) ativo (1 ou 0)
Pelo que posso perceber, esses dois campos basicamente tem a mesma função, ou seja o campo ativo só irá para 0 quando a data do campo expira for menor que a data atual, certo?
http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_sysdate
Caso o seu campo expira possa ser nulo (algo como nunca expira), a query ficaria
SELECT [campos] FROM [tabela] WHERE (expira > SYSDATE() OR expira is null) AND [... demais condições]
Perceba o "parêntesis"...ele faz uma grande diferença...
Com relação ao CRON, se realmente for necessário ou vc não concordar com essa solução que lhe passei, o que vc precisaria seria analisar de x em x tempo se tem algum registro com o campo expirado, e se existir, atualizar o campo para ativo=0
UPDATE [tabela] SET ativo = 0 WHERE expira < sysdate()
*** O mesmo conceito para o delete do registro.
O cron iria te ajudar justamente nisso: ele determinaria a frequencia que vc iria chamar o seu script para update do registro.
Enfim, espero ter sido claro nas explicações...