Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

hacer update a campo despues de X dias.

Estas en el tema de hacer update a campo despues de X dias. en el foro de Mysql en Foros del Web. Eso, Estoy desarrollando una web de avisos pubicitarios, en donde hay 3 categorias de avisos, y 3 tipos de vigencias. ORO, PLATA, BRONCE, y duracion ...
  #1 (permalink)  
Antiguo 03/05/2013, 22:22
 
Fecha de Ingreso: junio-2009
Mensajes: 10
Antigüedad: 14 años, 10 meses
Puntos: 1
Exclamación hacer update a campo despues de X dias.

Eso,

Estoy desarrollando una web de avisos pubicitarios, en donde hay 3 categorias de avisos, y 3 tipos de vigencias.

ORO, PLATA, BRONCE, y duracion de 30, 180, 360 días. Con lo que estoy liado es con la consulta SQL, ya que se que debo utilizar un cronjob en el server y ejecutarlo cada X dias (En mi caso una vez al dia a las 00:00:01 horas).

El la tabla tengo un campo INT(fechacreacion) donde guardo la fecha en formato UNIXTIME ( ej:1364781574), y otro campo numero con la duracion de la suscripcion (30,180,360), y un campo (estado) en donde guardo el valor de publicado(1), despublicado(0), que es el que deseo editar.

Como debo realizar la consulta para por ej: traer todos los registros del tipo oro, con duracion de 30 dias, y que el su fecha de creacion sea de hace 30 dias o mas?.

Por ejemplo pense en hacerlo asi pero nome resulto (En la tabla tengo 3 registros que cumplen con las condiciones, pero siempre me devuelve mas resultados):

Código MySQL:
Ver original
  1. UPDATE qppublicaciones SET estado=0 WHERE `tipo_suscripcion`='oro' AND `duracion_suscripcion` = '30' AND `estado` ='1' AND `duracion_suscripcion` - FLOOR( (
  2. (
  3. fechacreacion + ( 86400 *365 ) ) - unix_timestamp( )
  4. ) /86400
  5. )<= 0;
:(

Podrian ayudarme?.

He buscado informacion en el foro e internet, pero nada clarificador.

Muchas Gracias.

Última edición por gnzsoloyo; 04/05/2013 a las 04:16 Razón: SQL mal etiquetado
  #2 (permalink)  
Antiguo 04/05/2013, 16:46
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: hacer update a campo despues de X dias.

Cita:
En la tabla tengo 3 registros que cumplen con las condiciones, pero siempre me devuelve mas resultados
Por lo pronto, si MySQL te devuelve más de los registros esperados, entonces es que hay más registros que cumplen las condiciones indicadas. Para confirmarlo, entonces, habría que verificar la afirmación:

Código MySQL:
Ver original
  1. SELECT count(1) TOTALREGISTROS
  2. FROM qppublicaciones
  3.     `tipo_suscripcion`='oro'
  4.     AND `duracion_suscripcion` = 30
  5.     AND `estado` = 1
  6.     AND `duracion_suscripcion` - FLOOR(((fechacreacion + (86400 * 365)) - UNIX_TIMESTAMP())/86400)<= 0;
Código MySQL:
Ver original
  1. SELECT count(1) TOTALREGISTROS
  2. FROM qppublicaciones
  3.     `tipo_suscripcion`='oro'
  4.     AND `duracion_suscripcion` = 30
  5.     AND `estado` =1 ;

Por otro lado, sería buena idea ver si realmente lo que estás pidiendo es lo que supones estar pidiendo:
Código MySQL:
Ver original
  1.     `duracion_suscripcion`,
  2.     fechacreacion,
  3.     FLOOR(((fechacreacion + (86400 * 365)) - UNIX_TIMESTAMP())/86400) ValorARestar,
  4.     `duracion_suscripcion` - FLOOR(((fechacreacion + (86400 * 365)) - UNIX_TIMESTAMP())/86400)<= 0
  5. FROM qppublicaciones
  6.     `tipo_suscripcion`='oro'
  7.     AND `duracion_suscripcion` = 30
  8.     AND `estado` = 1
Con eso obtendrás los datos reales que se están calculando, y sobre qué base se hace.

Personalmente, me parece que a pesar de lo que supongas, es más seguro usar funciones de fecha para los cálculos, que funciones aritméticas tomando el UNIXTIME... Pero, es tu decisión.

Un ejemplo sería:
Código MySQL:
Ver original
  1. TIMESTAMPDIFF( DAY, FROM_UNIXTIME(fechacreacion), CURDATE())
Eso devuelve la cantidad de días pasados entre la creación del aviso y el día de hoy.

Adicionalmente, cuando leo:
Cita:
El la tabla tengo un campo INT(fechacreacion) donde guardo la fecha en formato UNIXTIME ( ej:1364781574), y otro campo numero con la duracion de la suscripcion (30,180,360), y un campo (estado) en donde guardo el valor de publicado(1), despublicado(0), que es el que deseo editar.
tengo la impresión de que tu sistema es innecesariamente complicado para establecer los periodos de vigencia, las publicaciones, y demás. He visto sistemas con estructuras de datos mejores que eso.
Pero, como dije, es un tema de decisión de diseño...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 04/05/2013, 17:14
 
Fecha de Ingreso: junio-2009
Mensajes: 10
Antigüedad: 14 años, 10 meses
Puntos: 1
Respuesta: hacer update a campo despues de X dias.

gnzsoloyo agradezco tu claridad y objetividad, la verdad es que es primera vez que hago algo asi... asi que me vienen muyn bien tus consejos... Evaluare lo que me dices, y cambare lo necesario.

Apenas tenga novedades poste como me fue. Muchas gracias

Etiquetas: campo, registros, sql, tabla, update
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 15:53.