Ir para conteúdo

POWERED BY:

Arquivado

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

alysson122010

Excluir Automáticamente no banco de dados

Recommended Posts

Infelizmente não há uma boa maneira de fazer isso... não há como colocar uma bomba-relógio em um determinado registro da tabela que o fará explodir quando sua hora chegar. O que é possível fazer para emular esse comportamento seria ou criar um tarefa (job) no cron.

Pesquise por "cron" ou "cronjob" no Google e poderá encontrar alguns artigos sobre como fazer.



cron é um software para sistemas tipo UNIX (Linux, FreeBSD, etc). Este software cron é equivalente ao Gerenciador de Tarefas do Windows.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas to falando em php não em programas. Não existe isso em php?

 

Não.

 

Eu sugeri cron tendo em mente usar cron para agendar uma data para a execução de um script PHP que faria a exclusão do registro.

 

O máximo que você pode fazer apenas com PHP e MySQL é criar uma condição para o comando de exclusão. Mas isso só será ativado quando um usuário acessar a aplicação.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mais vc sabe algum codigo que tipo ele nao exclua mas ele nao liste depois que passar a data informada?

Sim. É só usar a clausula [inline]WHERE[/inline] na sua consulta SQL. Tipo:

SELECT * FROM posts WHERE data_expiracao < CURDATE()

A função [inline]CURDATE()[/inline] retorna a data atual, se hoje retorna '2013-06-16', amanhã já será '2013-06-16' e assim por diante. A consulta acima retorna somente aqueles registros que tiverem o campo 'data_expiracao' menor (ou seja, uma data anterior) que a data atual (retornada pela função [inline]CURDATE()[/inline]).

 

Ref.: http://dev.mysql.com/doc/refman/5.6/en/date-and-time-functions.html

Compartilhar este post


Link para o post
Compartilhar em outros sites

Um vlw vou testar qualquer coisa volto aqui



Eu testei assim aqui mais tipo eu coloquei um com data 16/06/2013 e o outro 17/06/2013

O de 16/06/2013 nao era pra ter mostrado porque hoje e 16/06/2013 so era pra ter mostrado o de 17/06/2013

 

oque houver ver o codigo

 

<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
{
$theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
$theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);
switch ($theType) {
case "text":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "long":
case "int":
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
break;
case "double":
$theValue = ($theValue != "") ? "'" . doubleval($theValue) . "'" : "NULL";
break;
case "date":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "defined":
$theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
break;
}
return $theValue;
}
}
mysql_select_db($database_config, $config);
$query_list = "SELECT * FROM tabela WHERE data_expiracao < CURDATE()";
$list = mysql_query($query_list, $config) or die(mysql_error());
$row_list = mysql_fetch_assoc($list);
$totalRows_list = mysql_num_rows($list);
?>
<?php do { ?>
<?php echo $row_list['titulo']; ?><br />
<?php } while ($row_list = mysql_fetch_assoc($list)); ?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Observe que o sinal utilizado foi o [inline]<[/inline] (menor que). 16 não é menor que 16, mas igual. Se você quer que o dia atual também seja mostrado, troque pelo sinal [inline]<=[/inline] (menor que ou igual).

Compartilhar este post


Link para o post
Compartilhar em outros sites

MySQL tem sim, um Event Scheduler, que roda de tempos em tempos e permite que você efetue as operações desejadas no banco de dados.

 

http://dev.mysql.com/doc/refman/5.1/en/events-overview.html

 

 

MySQL Events are tasks that run according to a schedule. Therefore, we sometimes refer to them as scheduled events. When you create an event, you are creating a named database object containing one or more SQL statements to be executed at one or more regular intervals, beginning and ending at a specific date and time. Conceptually, this is similar to the idea of the Unix crontab (also known as a “cron job”) or the Windows Task Scheduler.

 

@braços

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você criar um campo na tabela por exemplo dt_expirar aí você faz um if mais ou menos assim:

$dt_expirar="aqui você coloca o resultado de um select na tabela"

 

if (($dt_expirar) <= date('Y-m-d')){

Aqui vc faz o delete.

}

Mais ou menos assim. Desculpas por algum erro, pois estou no celular.

Compartilhar este post


Link para o post
Compartilhar em outros sites

como introduzo esse codigo aqui

 

mysql_select_db($database_config, $config);
$query_list = sprintf("SELECT * FROM tabela WHERE data_expiracao = %s", GetSQLValueString($colname_list, "text"));
$list = mysql_query($query_list, $config) or die(mysql_error());
$row_list = mysql_fetch_assoc($list);
$totalRows_list = mysql_num_rows($list);

Compartilhar este post


Link para o post
Compartilhar em outros sites

De repente o @Andrey Knupp Vital aparece com um daqueles Eventos do MySQL que pelo visto faz o mesmo que as CronJobs.

 

Não sei, estou só especulando

Compartilhar este post


Link para o post
Compartilhar em outros sites

De repente o @Andrey Knupp Vital aparece com um daqueles Eventos do MySQL que pelo visto faz o mesmo que as CronJobs.

 

Não sei, estou só especulando

 

 

hehehe, foi o que sugeri no post #10, mas só mandei o link :)

 

CREATE EVENT apagar_antigos
    ON SCHEDULE
      EVERY 1 HOUR
    COMMENT 'Apaga os posts antigos'
    DO
      DELETE FROM posts WHERE data_expiracao < NOW()

@braços

Compartilhar este post


Link para o post
Compartilhar em outros sites

hehehe, foi o que sugeri no post #10, mas só mandei o link :)

 

Ops! :blush:

 

Passei batido

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.