Entradas con la etiqueta ‘fecha’

Consulta SQL para manejar intervalos de campos tipo fecha

Lunes, 4 de Agosto de 2008

Tenemos una tabla Mysql que contiene información sobre pedidos. Ésta dispone, entre otros, de un campo fecha del tipo datetime con la fecha y la hora en las que se registra cada pedido. Otro campo, del tipo int, determina el identificador del estado en que se halla cada pedido. Estamos interesados en realizar un script php para consultar cada día esta tabla y eliminar (o en nuestro caso, cambiarlos de estado) todos los pedidos realizados hace más de 7 días que todavía no hayan sido pagados. Es decir, el campo identificador del estado nos dará la información del pago.

La consulta SQL realizada es la siguiente:

UPDATE `Pedido` SET `idEstado` = ‘5′ WHERE (`idEstado` = 2) AND (`fecha` < DATE_SUB(CURDATE(), INTERVAL 7 DAY))

Con esta consulta UPDATE simplemente estamos actualizando el estado de los pedidos que se hallan en estado 2 (estado pendiente de pago) y que el campo fecha indica que fueron registrados anteriormente al periodo comprendido entre la fecha actual y los últimos 7 días. Los registros que cumplen estas condiciones pasarán a estado 5 (estado de cancelado, descartado o anulado).

Como se puede observar, ha sido preciso utilizar la función de Mysql DATE_SUB. Esta función necesita dos argumentos: una fecha de inicio y un parámetro de intervalo de tiempo para establecer un período pasado a partir de la fecha de inicio. Si se desea hacer lo mismo pero haciendo que el intervalo sea futuro a partir de la fecha de inicio (en vez de pasado) existe la función análoga la cual se llama DATE_ADD y precisa exactamente de los mismos argumentos. Esta función nos ha permitido efectuar operaciones de comparación con fechas.

En nuestro caso particular los parámetros que le hemos pasado a la función han sido:

  • fecha de inicio: CURDATE(). Esta función devuelve la fecha actual.
  • intervalo: INTERVAL 7 DAY. Instrucción que configura el intervalo.

Para ver como configurar el argumento del intervalo y conocer más detalles de estas dos funciones podéis hacer click aquí.

Si queréis ver como disparar automáticamente en el servidor un script php podéis consultar la entrada ejecutar diariramente un fichero PHP mediante crontab + wget.