2012-03-26 14 views
14

no tengo idea de por dónde empezar con éste:¿Cómo se borra la fila mysql después de que pase el tiempo?

Tengo una base de datos que almacena y postIDDate.

Lo que quiero hacer es hacer que mi sitio web elimine automáticamente todas las filas donde Date es menor que el día de hoy. Este script no puede tener ninguna entrada del usuario. Ningún botón hace clic, nada. El script debe ejecutarse todos los días a la medianoche.

He estado buscando por todos lados algo que hace esto y no he encontrado absolutamente nada.

+0

Hay una serie de aspectos a esto: (1) escribir la declaración 'DELETE'; (2) crear un script que ejecute la instrucción 'DELETE'; (3) configurar el script para que se ejecute todas las noches a la medianoche. ¿Con cuáles de ellos necesitas ayuda? – ruakh

+0

Necesitaba ayuda para averiguar cómo hacer que mi código se dispare automáticamente sin intervención del usuario. Las respuestas a continuación apuntaban a CRON, así que investigaré eso. – Sweepster

Respuesta

19

Puede utilizar el script PHP y usar cron job en su panel de control.

Ejemplo:

cronjobcommand.php

<?php 
include 'your_db_connection'; 
mysql_query("DELETE FROM your_table_name WHERE Date < NOW()"); 
?> 

He adjuntado una captura de pantalla a continuación para su referencia.

enter image description here

0

Debe establecer el trabajo cron (tachado programado) para ello.

A cron job es una configuración de programa automatizada para sistemas operativos Linux y Unix. Le permite al usuario ejecutar varios comandos o funciones en una fecha y hora específica.

tiene cron Job en la configuración de su panel de control. primero necesita hacer un script php con su lógica para eliminar el registro después de cada fecha. tomar la fecha del servidor y escribir la secuencia de comandos para eliminar.

luego vaya a la pestaña cron en su panel de control y realice la configuración del intervalo de tiempo para ejecutar cron y dar la ruta de su archivo de script php.

2

La mayoría de los hosts proporcionan un servicio cron(8) que puede ejecutar comandos en momentos específicos. Utiliza el programa crontab(1) para administrar el archivo crontab(5) que describe cuándo ejecutar qué comandos.

Hay mucha funcionalidad disponible para usted, pero si escribe un programa (script de shell, script php, programa C, lo que sea) que ejecute los comandos apropiados de MySQL, puede llamar al programa a través del cron(8) en un fuera de moda.

Ejecute crontab -e para editar su archivo actual crontab(5). Si no existe ninguno, con suerte obtendrá uno con un encabezado útil. Si no es así, copiar este:

# m h dom mon dow command 

Las columnas indican el minuto, hora, día del mes, mes y día de la semana para ejecutar comandos. Todos los números en las columnas son esencialmente AND juntos para decidir cuándo ejecutar comandos.

Por lo tanto, la medianoche cada noche se vería así:

0 0 * * * /path/to/executable 

Se es muy flexible, por lo que poner un poco de tiempo en la documentación, y encontrará muchos usos para él.

-2

MySQL no tiene un planificador de tareas. Por lo tanto, debe utilizar el programador de tareas de su sistema operativo (CRON en Linux) o almorzar un subguión de comprobador de tareas básico durante el script de la página principal (en otra página que se supone que muestra los datos cambiantes).

+4

Eso no es verdad. MySQL tiene un programador de eventos, implementado en la versión 5.1.6 (2006-02-01). Más información: [Agenda de eventos MySQL] (http://dev.mysql.com/doc/refman/5.1/en/events.html). – devrique

4

Para aquellos que por ahí que están en un alojamiento compartido, como el de 1and1, y no se puede usar cron, aquí hay 2 alternativas:

  • mysql events le permiten colocar un disparador de tiempo en mysql, que se ejecutará cuando lo desee, sin tener que ser despedido por ningún tipo de entrada de usuario

  • si no puede crear eventos mysql porque está en 1and1 :(, una alternativa es usar webcron

Sólo tiene que contar Webcron la url del script php desea ser ejecutado, y van a los activa para usted en los intervalos que desea

3

¿Por qué utilizar cronjobs todos los días? ? ¿Por qué no filtrar los datos en la salida? Por ejemplo, en su selecto de verificación si es igual a fecha de hoy, con la adición de un simple where:

SELECT * FROM `posts` 
WHERE (DATE(`post_date`) = DATE(NOW())); 

esta manera usted no está obligado hacer su base de datos gerencias/cronjobs en cualquier momento especial y que será utilizado solo para la gestión de bases de datos. Después se puede eliminar datos innecesarios en cualquier momento usando por comandos de MySQL como:

DELETE FROM `posts` WHERE (
    DATE(`post_date`) < DATE(NOW()) 
) 
+0

Supongamos que tengo un caso en el que, en mi base de datos, tengo un registro que se publicó en una fecha especial y que necesito eliminar en una fecha concreta. ¿Qué harás para ejecutar el script de forma automática? –

+0

@sudhakarphad Perdón por mi respuesta tardía; simplemente puede agregar un tiempo límite a su comparación (post_date + deadlinetime) en ese caso. –

Cuestiones relacionadas