Ver Mensaje Individual
  #2 (permalink)  
Antiguo 04/05/2013, 16:46
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años, 2 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)