Foros del Web » Programando para Internet » PHP »

Borrar datos MySQL cada x dias

Estas en el tema de Borrar datos MySQL cada x dias en el foro de PHP en Foros del Web. ¿Se puede hacer de alguna manera que los datos recogidos se borren automaticamente a los x dias en una base de datos MySQL?...
  #1 (permalink)  
Antiguo 22/07/2010, 05:15
 
Fecha de Ingreso: diciembre-2009
Ubicación: España
Mensajes: 380
Antigüedad: 14 años, 3 meses
Puntos: 1
Pregunta Borrar datos MySQL cada x dias

¿Se puede hacer de alguna manera que los datos recogidos se borren automaticamente a los x dias en una base de datos MySQL?
  #2 (permalink)  
Antiguo 22/07/2010, 05:35
Avatar de Vun
Vun
Colaborador
 
Fecha de Ingreso: agosto-2009
Ubicación: Benalmádena, España
Mensajes: 2.265
Antigüedad: 14 años, 7 meses
Puntos: 150
Respuesta: Borrar datos MySQL cada x dias

Se puede hacer de varias formas. Yo te recomiendo usar un cronjob, con el que haces que se ejecute un script por ejemplo cada semana, o cada dia. ¿que panel de control tienes en tu hosting? Con cpanel lo haces en un plis. Dime y te digo como es.
  #3 (permalink)  
Antiguo 22/07/2010, 05:35
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 10 meses
Puntos: 1517
Respuesta: Borrar datos MySQL cada x dias

Sí, busca información sobre cronjob.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #4 (permalink)  
Antiguo 22/07/2010, 05:49
 
Fecha de Ingreso: diciembre-2009
Ubicación: España
Mensajes: 380
Antigüedad: 14 años, 3 meses
Puntos: 1
Respuesta: Borrar datos MySQL cada x dias

Tengo hosting gratuito en 000webhost y tiene cPanel
  #5 (permalink)  
Antiguo 22/07/2010, 05:58
Avatar de Vun
Vun
Colaborador
 
Fecha de Ingreso: agosto-2009
Ubicación: Benalmádena, España
Mensajes: 2.265
Antigüedad: 14 años, 7 meses
Puntos: 150
Respuesta: Borrar datos MySQL cada x dias

Entra en el menu Cronjobs

En la seccion 'Add New Cron Job' pon en Minute * , Hour *, Day *, Month * y Weekday * (todo asteriscos), esto hara que cada minuto se ejecute lo que queremos, luego cuando veas que todo va bien lo cambiaremos para que lo ejecute 1 vez por semana.

En Command pones algo como: /home/tuusuario/public_html/cronjob.sh (o la ruta correspondiente a tu hosting)

Crea el archivo cronjob.sh con lo siguiente:

php /home/tusuario/public_html/borrardatos.php

Y ya en borrardatos.php programas normalmente el borrado de los datos que quieras. Prueba primero a que simplemente modifique algun dato en vez de borrar nada, asi ves que se esta ejecutando bien el cronjob.

Cuando lo tengas todo listo entras a editar el cronjob y pones: Minute 0, Hour 0, Day *, Month * y Weekday 1 (para el lunes)

Prueba y me dices.
  #6 (permalink)  
Antiguo 22/07/2010, 06:04
 
Fecha de Ingreso: diciembre-2009
Ubicación: España
Mensajes: 380
Antigüedad: 14 años, 3 meses
Puntos: 1
Respuesta: Borrar datos MySQL cada x dias

pero haver, creo que me explique mal.
No quiero que cada X tiempo se borren los datos si no que cuando unos datos cumplan X dias se borren automaticamente.
Sorry por la confusion :S
  #7 (permalink)  
Antiguo 22/07/2010, 14:35
Avatar de Vun
Vun
Colaborador
 
Fecha de Ingreso: agosto-2009
Ubicación: Benalmádena, España
Mensajes: 2.265
Antigüedad: 14 años, 7 meses
Puntos: 150
Respuesta: Borrar datos MySQL cada x dias

De alguna forma se tiene que ejecutar un código automaticamente ¿no?

Bueno, otra forma de hacerlo es guardando el tiempo time() en cada registro, y cada vez que insertes uno, automaticamente borre los que fueron creados hace X dias.
  #8 (permalink)  
Antiguo 23/07/2010, 02:54
 
Fecha de Ingreso: diciembre-2009
Ubicación: España
Mensajes: 380
Antigüedad: 14 años, 3 meses
Puntos: 1
Respuesta: Borrar datos MySQL cada x dias

he pensado que con php podria hacer un script que borrase todos los datos que tuviesen más de X tiempo,y con cronjobs programar que se ejecutase cada dia
Es una manera ¿no?
  #9 (permalink)  
Antiguo 23/07/2010, 02:58
Avatar de Vun
Vun
Colaborador
 
Fecha de Ingreso: agosto-2009
Ubicación: Benalmádena, España
Mensajes: 2.265
Antigüedad: 14 años, 7 meses
Puntos: 150
Respuesta: Borrar datos MySQL cada x dias

Cita:
Iniciado por DavidBL Ver Mensaje
he pensado que con php podria hacer un script que borrase todos los datos que tuviesen más de X tiempo,y con cronjobs programar que se ejecutase cada dia
Es una manera ¿no?
Asi es como explique al principio, un cronjob que activa un archivo .sh que a su vez ejecuta un script .php
  #10 (permalink)  
Antiguo 23/07/2010, 03:39
 
Fecha de Ingreso: diciembre-2009
Ubicación: España
Mensajes: 380
Antigüedad: 14 años, 3 meses
Puntos: 1
Respuesta: Borrar datos MySQL cada x dias

en mysql se puede hacer que los datos tengan un campo con valor 1 y que cada dia aumente 1?
  #11 (permalink)  
Antiguo 23/07/2010, 03:43
Avatar de Vun
Vun
Colaborador
 
Fecha de Ingreso: agosto-2009
Ubicación: Benalmádena, España
Mensajes: 2.265
Antigüedad: 14 años, 7 meses
Puntos: 150
Respuesta: Borrar datos MySQL cada x dias

Claro, ¿pero eso que dices quien lo activa? ¿automatico? Pues sería otro cronjob diario. Yo te recomiendo que pruebes a manejar la funcion time();

Haz echo time(); veras que te muestra el tiempo 'en segundos', si a cada registro le guardas su time() al ser creado ya tienes todo hecho. Luego puedes borrar aquellos registros cuyo time() actual menos el time() de creación guardado sea mayor que 86400 (un dia).
  #12 (permalink)  
Antiguo 23/07/2010, 03:56
 
Fecha de Ingreso: diciembre-2009
Ubicación: España
Mensajes: 380
Antigüedad: 14 años, 3 meses
Puntos: 1
Respuesta: Borrar datos MySQL cada x dias

lo voy a probar gracias :)
  #13 (permalink)  
Antiguo 23/07/2010, 04:16
Avatar de Vun
Vun
Colaborador
 
Fecha de Ingreso: agosto-2009
Ubicación: Benalmádena, España
Mensajes: 2.265
Antigüedad: 14 años, 7 meses
Puntos: 150
Respuesta: Borrar datos MySQL cada x dias

Esta sería la sentencia Mysql siempre que guardes en TIMECREACION el time() correctamente:

DELETE from tabla where (UNIX_TIMESTAMP()-tabla.TIMECREACION)>86400
  #14 (permalink)  
Antiguo 23/07/2010, 06:49
 
Fecha de Ingreso: diciembre-2009
Ubicación: España
Mensajes: 380
Antigüedad: 14 años, 3 meses
Puntos: 1
Respuesta: Borrar datos MySQL cada x dias

haver seria algo asi?
Cita:
//Conexion con la base de datos
<?php
$time = time();
$result = $time - $row_Recordset1['time'];

if($result >= 60){
mysql_query(DELETE from time where (UNIX_TIMESTAMP()-time.TIMECREACION)>60);
}
?>
Por cierto he cambiado el86400 a 60 para las pruebas
  #15 (permalink)  
Antiguo 23/07/2010, 07:10
Avatar de Vun
Vun
Colaborador
 
Fecha de Ingreso: agosto-2009
Ubicación: Benalmádena, España
Mensajes: 2.265
Antigüedad: 14 años, 7 meses
Puntos: 150
Respuesta: Borrar datos MySQL cada x dias

Tan solo sería necesario esto en tu .php:

mysql_query("DELETE from time where (UNIX_TIMESTAMP()-time.TIMECREACION)>60");

Con eso ya esta mirando todos los registros y borrando los antiguos.
  #16 (permalink)  
Antiguo 23/07/2010, 08:20
 
Fecha de Ingreso: diciembre-2009
Ubicación: España
Mensajes: 380
Antigüedad: 14 años, 3 meses
Puntos: 1
Respuesta: Borrar datos MySQL cada x dias

entonces si pongo esto en un php se borraran los antiguos?
//datos de conexion
mysql_query("DELETE from time where (UNIX_TIMESTAMP()-time.TIMECREACION)>60");

Lo digo por que he insertado unos datos y a los 3 minutos lo he ejecutado he mirado la base de datos y no se ha borrado nada
  #17 (permalink)  
Antiguo 23/07/2010, 12:51
Avatar de Vun
Vun
Colaborador
 
Fecha de Ingreso: agosto-2009
Ubicación: Benalmádena, España
Mensajes: 2.265
Antigüedad: 14 años, 7 meses
Puntos: 150
Respuesta: Borrar datos MySQL cada x dias

Dime los 3 valores de TIMECREACION que creaste, y lo que sale al imprimir echo time();
  #18 (permalink)  
Antiguo 23/07/2010, 12:58
 
Fecha de Ingreso: diciembre-2009
Ubicación: España
Mensajes: 380
Antigüedad: 14 años, 3 meses
Puntos: 1
Respuesta: Borrar datos MySQL cada x dias

veras en la tabla no hay 3 valores solo hay 1, porque es para la prueba
el valor es time
y al imprimir echo time(); 1279911505
  #19 (permalink)  
Antiguo 23/07/2010, 13:00
Avatar de Vun
Vun
Colaborador
 
Fecha de Ingreso: agosto-2009
Ubicación: Benalmádena, España
Mensajes: 2.265
Antigüedad: 14 años, 7 meses
Puntos: 150
Respuesta: Borrar datos MySQL cada x dias

¿El valor numerico del campo TIMECREACION cual es? tendrá que ser algo parecido a 1279911505. Al momento de crear el registro pues lo rellenas con un time();.

De esa forma esto (UNIX_TIMESTAMP()-time.TIMECREACION)>60 tiene sentido.
  #20 (permalink)  
Antiguo 23/07/2010, 13:11
 
Fecha de Ingreso: diciembre-2009
Ubicación: España
Mensajes: 380
Antigüedad: 14 años, 3 meses
Puntos: 1
Respuesta: Borrar datos MySQL cada x dias

vale, me sigue sin ir.
Voy a poner todos los datos para ver si encuentras algun fallo
TIMECREATION es un INT(200)
El valor de prueba de TIMECREATION es 1279894498
Y el PHP que debería borrarlo es así:
Cita:
<?php require_once('Connections/Prueba.php');
mysql_query("DELETE from time where ((UNIX_TIMESTAMP()-time.TIMECREACION)>60");
?>
Y más datos el PHP que inserta los datos de prueba es este:
Cita:
<?php require_once('Connections/Prueba.php'); ?>
<?php
$time = time();
$sql = "INSERT INTO time (TIMECREACION) VALUES ('$time')";
mysql_query($sql);
?>
  #21 (permalink)  
Antiguo 23/07/2010, 13:16
Avatar de Vun
Vun
Colaborador
 
Fecha de Ingreso: agosto-2009
Ubicación: Benalmádena, España
Mensajes: 2.265
Antigüedad: 14 años, 7 meses
Puntos: 150
Respuesta: Borrar datos MySQL cada x dias

Creo que hay un parentesis de mas aqui:

mysql_query("DELETE from time where ((UNIX_TIMESTAMP()-time.TIMECREACION)>60");

Quitalo a ver si es eso
  #22 (permalink)  
Antiguo 24/07/2010, 03:10
 
Fecha de Ingreso: diciembre-2009
Ubicación: España
Mensajes: 380
Antigüedad: 14 años, 3 meses
Puntos: 1
Respuesta: Borrar datos MySQL cada x dias

pues lo he quitado, y nada sigue sin darme errores, pero no me borra los datos de prueba.
¿Tendra algo que ver que este haciendo las pruebas con el wamp?
  #23 (permalink)  
Antiguo 24/07/2010, 03:16
Avatar de Vun
Vun
Colaborador
 
Fecha de Ingreso: agosto-2009
Ubicación: Benalmádena, España
Mensajes: 2.265
Antigüedad: 14 años, 7 meses
Puntos: 150
Respuesta: Borrar datos MySQL cada x dias

Metete en la consola del phpmyadmin y ejecuta:

DELETE from time where (UNIX_TIMESTAMP()-time.TIMECREACION)>60

Y fijate si te da algun error, y si no lo da, fijate abajo que te dice cuantas filas ha afectado (borrado en este caso)

Si te dice que 0, prueba a cambiar a:

DELETE from time where (UNIX_TIMESTAMP()-time.TIMECREACION)<0

Todo sea por dar con el motivo de que no borra nada.

Tambien puedes probar un

SELECT UNIX_TIMESTAMP();

Para comprobar que realmente eso devuelve una cifra
  #24 (permalink)  
Antiguo 24/07/2010, 04:12
 
Fecha de Ingreso: diciembre-2009
Ubicación: España
Mensajes: 380
Antigüedad: 14 años, 3 meses
Puntos: 1
Respuesta: Borrar datos MySQL cada x dias

si lo hago desde la entrada de phpmyadmin me da el siguiente error #1046 - No database selected
Pero si lo hago dentro de la base de datos no me da ningun error y ha borrado los datos de muestra
  #25 (permalink)  
Antiguo 24/07/2010, 11:13
Avatar de Vun
Vun
Colaborador
 
Fecha de Ingreso: agosto-2009
Ubicación: Benalmádena, España
Mensajes: 2.265
Antigüedad: 14 años, 7 meses
Puntos: 150
Respuesta: Borrar datos MySQL cada x dias

¿entonces? ¿que consulta hiciste la primera o la segunda? Ahora aplicalo a tu archivo .php y luego configura el cronjob tal como te dije anets.
  #26 (permalink)  
Antiguo 25/07/2010, 03:25
 
Fecha de Ingreso: diciembre-2009
Ubicación: España
Mensajes: 380
Antigüedad: 14 años, 3 meses
Puntos: 1
Respuesta: Borrar datos MySQL cada x dias

hice la primera.
Pero no entiendo una cosa:
ahora uso el PHP para insertar el time, y ya no funciona.
No he cambiado el codigo absolutamente nada, ni me da error.

Última edición por DavidBL; 25/07/2010 a las 04:01
  #27 (permalink)  
Antiguo 25/07/2010, 04:25
Avatar de Vun
Vun
Colaborador
 
Fecha de Ingreso: agosto-2009
Ubicación: Benalmádena, España
Mensajes: 2.265
Antigüedad: 14 años, 7 meses
Puntos: 150
Respuesta: Borrar datos MySQL cada x dias

A ver , pon todo el codigo, quizas sea alguna tonteria.
  #28 (permalink)  
Antiguo 26/07/2010, 03:03
 
Fecha de Ingreso: diciembre-2009
Ubicación: España
Mensajes: 380
Antigüedad: 14 años, 3 meses
Puntos: 1
Respuesta: Borrar datos MySQL cada x dias

El codigo que inserta(antes insertaba, ahora no) el time es este:
Cita:
<?php require_once('Connections/Prueba.php'); ?>
<?php
$time = time();
$sql = "INSERT INTO time (TIMECREACION) VALUES ('$time')";
mysql_query($sql);
?>
Y el codigo que tendria que borrarlos
Cita:
<?php require_once('Connections/Prueba.php');
mysql_query(DELETE from time where (UNIX_TIMESTAMP()-time.TIMECREACION)>60);
?>
Haver si encuentras algo
  #29 (permalink)  
Antiguo 26/07/2010, 04:22
Avatar de Vun
Vun
Colaborador
 
Fecha de Ingreso: agosto-2009
Ubicación: Benalmádena, España
Mensajes: 2.265
Antigüedad: 14 años, 7 meses
Puntos: 150
Respuesta: Borrar datos MySQL cada x dias

Pero a ver, ¿en que tabla tienes los datos que quieres borrar? Estamos liandonos demasiado ya me parece...........

Te pongo un ejemplo, imaginate una tabla de VENTAS , con los campos ID, PRODUCTO, PRECIO, TIMECREACION, y varios registros:

1 - Camiseta - 15 - 1279894498
2 - Pantalon- 25 - 1279894500
3 - Gorra - 5 - 1279894600
4 - Zapatos - 35 - 1279894700
5 - Chaqueta - 50 - 1279894800
6 - Blusa - 20 - 1279894900

Ahi estan los registros, con su time() de cuando se realizo la venta correspondiente ¿ok? Pues ahora con esto se borrarian las ventas hechas hace mas de 60 segundos:

mysql_query("DELETE from VENTAS where (UNIX_TIMESTAMP()-VENTAS.TIMECREACION)>60");

(No le quites las comillas, que he visto en tu post anterior que se las habias quitado)

Espero entiendas ahora, yo me rindo ya xD
  #30 (permalink)  
Antiguo 26/07/2010, 09:24
 
Fecha de Ingreso: diciembre-2009
Ubicación: España
Mensajes: 380
Antigüedad: 14 años, 3 meses
Puntos: 1
Respuesta: Borrar datos MySQL cada x dias

pues lo he revisado y esta todo bien, yo casi que tambien me rindo, sabes alguna otra manera de hacerlo?

Etiquetas: borrar, dias, mysql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:18.