Eliminar registros de MySQL inactivos

Estoy construyendo una base de datos y me enfrento al siguiente problema:
Cuando un usuario se registra, la fecha de registro queda almacenada en un campo llamado regdate de mi base de datos en formato timestamp.
Quiero eliminar las cuentas de usuario en las que haya pasado un periodo de tiempo determinado.
¿Cómo puedo hacerlo?

1 Respuesta

Respuesta
1
Lo primer es que conozcas el manejo de las fechas en php, para tu necesidad la comparación entre 2 fechas, para esto hay muchas maneras de hacerlo, según el gusto y la necesidad, pero te envío unos ejemplilllos que al final te da la diferencia entre las 2 fechas. Luego aplicas ese script a una consulta a tu base de datos y como resultado te dará un array que contenga las fechas en ese intervalo.
Luego haces el script de borrado en la tabla con el resultado obtenido.
Espero te ayude
Bye
Almonato
--------------------
Como sabes el reloj del ordenador guarda los ciclos de reloj que han pasado desde el 1 de Enero de 1970. Por eso cualquier lenguaje de programación te proporciona alguna función que te da el número de segundos que han pasado desde el 1 de Enero de 1970. Y el php no iba a ser menos. La función se llama
"int mktime(int hour, int minute, int second, int month, int day, int year)".
Debes pasar los parámetros en el orden que se indican. Ahí va un pequeño código de ejemplo:
<?php
$actual = date("Y-m-d h:i:s");
$anterior = "2004-08-29 13:05:02";
list($fechaAct, $horaAct) = explode(" ", $actual);
list($yearAct, $mesAct, $dayAct) = explode("-", $fechaAct);
list($horaAct, $minAct, $secAct) = explode(":", $horaAct);
list($fechaAnt, $horaAnt) = explode(" ", $anterior);
list($yearAnt, $mesAnt, $dayAnt) = explode("-", $fechaAnt);
list($horaAnt, $minAnt, $secAnt) = explode(":", $horaAnt);
$sAct = mktime($horaAct, $minAct, $secAct, $mesAct, $dayAct, $yearAct);
$sAnt = mktime($horaAnt, $minAnt, $secAnt, $mesAnt, $dayAnt, $yearAnt);
$diffSeg = sAct - sAnt;
$diffMin = $diffSeg / 60;
$diffHoras = $diffMin / 60;
?>
------------------------
OTRO
-------------------------
<?php
$actual = date("Y-m-d ");
$anterior = "2005-04-19";
list($fechaAct) = explode(" ", $actual);
list($yearAct, $mesAct, $dayAct) = explode("-", $fechaAct);
list($fechaAnt) = explode(" ", $anterior);
list($yearAnt, $mesAnt, $dayAnt) = explode("-", $fechaAnt);
$sAct = mktime( 0,0,0,$mesAct, $dayAct, $yearAct);
$sAnt = mktime( 0,0,0,$mesAnt, $dayAnt, $yearAnt);
$diffSeg = $sAct - $sAnt;
$diffMin = $diffSeg / 60;
$diffHoras = $diffMin / 60;
$diffdias =$diffHoras/24;
echo $sAct."<br>";
echo $sAnt."<br>";
echo "segundos " . $diffSeg."<br>";
echo "minutos " . $diffMin."<br>";
echo "horas " . $diffHoras."<br>";
echo "Dias " . $diffdias."<br>";
?>
------------------------
OTRO
-------------------------
El formato timestamp de unix es sencillo de usar pero limitado en el rango que abarca, este va desde 1970 hasta el 2038 en Windows y va desde 1901 hasta 2038 en Unix. Por lo que trabajar con fechas anteriores o posteriores da errores.
Para esto, hay varias soluciones que van desde librerías con timestamps más amplios hasta trabajar con otro formato como por ejemplo el DATETIME de MySQL.
¿Este tip apunta obtener los registros cuyo campo? ¿CampoFecha? En formato DATETIME, está entre un rango de años determinado.
¿Para sacar registros cuyo campo? ¿CampoFecha? Está dentro de un rango que va desde el 1789 hasta el 2000 podríamos hacerlo simplemente de este modo:
SELECT * FROM tuTabla WHERE DATEDIFF('1789',campoFecha) < 0 AND DATEDIFF('2000',casmpoFecha) > 0
DATEDIFF('fecha1','fecha2') saca la diferencia de la primer fecha respecto a la segunda. Por lo que si la fecha1 es mayor a la fecha2 el número da positivo y, por el contrario, si fecha1 es menor a fecha2 el número resultante da negativo.
Entonces, si tenemos que el registro tiene una fecha mayor a 1978 y esa fecha es menor a 2000, lo selecciona. Se pueden usar también >= o <= para incluir la fecha límite.
Lamentablemente, la función DATEDIFF funciona a partir de la versión MySQL 4.1.1. y muchos de los servicios de hosting actuales disponen de versiones anteriores de este motor de base de datos.
Entonces una de las alternativas para versiones de MySQL inferiores podría ser la siguiente:
SELECT * FROM tuTabla WHERE TO_DAYS('1978') - TO_DAYS('campoFecha') < 0 AND TO_DAYS('2000') - TO_DAYS(campoFecha) <= 0
TO_DAYS('año') devuelve la cantidad de días desde el año 0 hasta ese mismo año. Por lo que la diferencia daría positivo o negativo según los valores restados.
-------------------------
Te recomiendo cionsultar:
http://dev.mysql.com/doc/mysql/en/date-and-time-functions.html
Cualquier cosa me cuentas
Bye
Almonato

Añade tu respuesta

Haz clic para o
El autor de la pregunta ya no la sigue por lo que es posible que no reciba tu respuesta.

Más respuestas relacionadas