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

Realizar UPDATE a partir de fecha y hora introducidas en BD

Estas en el tema de Realizar UPDATE a partir de fecha y hora introducidas en BD en el foro de Mysql en Foros del Web. Hola, Estoy implementando una pagina de anuncios y no se como puedo resolver el siguiente problema: Los anuncios se ordenan por fecha de inserción. Quiero ...
  #1 (permalink)  
Antiguo 29/06/2013, 12:25
 
Fecha de Ingreso: junio-2013
Mensajes: 2
Antigüedad: 10 años, 10 meses
Puntos: 0
Pregunta Realizar UPDATE a partir de fecha y hora introducidas en BD

Hola,

Estoy implementando una pagina de anuncios y no se como puedo resolver el siguiente problema:

Los anuncios se ordenan por fecha de inserción. Quiero implementar un servicio para el cliente, que consiste en programar subidas de su anuncio, lo cual quiere decir que se actualizará la fecha de inserción y su anuncio saldrá en las primeras posiciones. Entonces el cliente inserta unos días y horas determinadas que se almacenarán en la bd asociados a su anuncio. Por tanto, quiero que cuando se cumplan dichas fechas y horas almancenadas, se haga un UPDATE sobre la fecha de inserción.

¿Es posible que lo haga esto mysql?

Si no, alguna forma de implementarlo.
Había pensado en un programa servidor, pero seria una locura que dicho programa estuviera constantemente consultando.

Saludos,

Última edición por sines_46; 29/06/2013 a las 12:30
  #2 (permalink)  
Antiguo 01/07/2013, 02:40
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Realizar UPDATE a partir de fecha y hora introducidas en BD

No necesitas hacer el update,

Cita:
Entonces el cliente inserta unos días y horas determinadas que se almacenarán en la bd asociados a su anuncio
como bien dices esa informació ya se ha guardada en la bbdd, luego solo tienes que relacionar esa información con los anuncios para que se puebliquen.

TablaAnuncios
idAnuncio
....


TablaPeticionesClientes
fechaHoraInicial
fechaHoraFinal
idAnuncio


Código MySQL:
Ver original
  1. SELECT a.* FROM TablaAnuncios a
  2. WHERE a.idAnuncio IN (SELECT idAnuncio
  3.                                       FROM TablaPeticionesClientes
  4.                                       WHERE fechaHoraInicial<=NOW()
  5.                                       AND fechaHoraFinal>=now())

Sin hacer ningún UPDATE esa query retorna los anuncios a publicar.

Una alternativa para conservar el uso de la fecha de inserción seria

Código MySQL:
Ver original
  1. SELECT a.*,
  2.              if(sbc.idAnuncio IS NULL, a.fechaInsercion,NOW()) fechaPublic
  3. FROM TablaAnuncios a
  4.         LEFT JOIN (SELECT idAnuncio
  5.                              FROM TablaPeticionesClientes
  6.                              WHERE fechaHoraInicial<=NOW()
  7.                                 AND fechaHoraFinal>=now()) sbc
  8.         ON a.idAnuncio=sbc.idAnuncio
  9. ORDER BY fechaPublic DESC;

La idea es que como la información necesaria ya esta en la bbdd no tengas que hacer ninguna operación para modificar otra información en la bbdd que pasaria a depender de la primera, incurriendo en un error en el paradigma relacional.

Otra alternativa seria guardar la peticiones del cliente directamente en la tabla de anuncios

TablaAnuncios
idAnuncio
....
fechaHoraInicial <----Petición del cliente
fechaHoraFinal

Ahora si tendrias que hacer un update pero seleccionando por el idAnuncio

Código MySQL:
Ver original
  1. UPDATE TablaAnuncios SET fechaHoraInicial='XXXXXXXXXX', fechaHoraFinal='YYYYYYYY' WHERE idAnuncio=Z

Donde XXXXXXXX e YYYYYYYYYYYY son las fechas pedidas y Z el anuncio.

Y en este caso la query seria

Código MySQL:
Ver original
  1. SELECT a.*,
  2.              if(a.fechaHoraInicial<=NOW() and fechaHoraFinal>=NOW(),NOW(),a.fechaInsercion) fechaPublic
  3. FROM TablaAnuncios a ORDER BY fechaPublic DESC;

La primera opción, con dos tablas, generara un historico que puede servir para otras cosas, cobrar p.e., la segunda no.

Y aún una tercera opción con este update

Código MySQL:
Ver original
  1. UPDATE TablaAnuncios SET fechaInsercion='XXXXXXXXXX', fechaHoraFinal='YYYYYYYY' WHERE idAnuncio=Z

Código MySQL:
Ver original
  1. SELECT a.*,
  2.              if(a.fechaInsercion<=NOW() and fechaHoraFinal>=NOW(),NOW(),a.fechaInsercion) fechaPublic
  3. FROM TablaAnuncios a ORDER BY fechaPublic DESC;


Sin histórico, pero seria la mas simple.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 01/07/2013 a las 03:07
  #3 (permalink)  
Antiguo 01/07/2013, 08:50
 
Fecha de Ingreso: junio-2013
Mensajes: 2
Antigüedad: 10 años, 10 meses
Puntos: 0
Respuesta: Realizar UPDATE a partir de fecha y hora introducidas en BD

Hola quimfv,

Ante todo muchas gracias por tu respuesta.

Pero creo que no nos hemos entendido del todo o yo no acabo de entender tu respuesta.

Te comento:

como bien dices yo tendré a parte de otros atributos: id | fechayhora_insercion | fechayhora_caducidad

Entonces el anuncio estará activo durante 30 días por ejemplo, a continuación yo cuando se inserte pondré la fechayhora actual y la de caducidad sumándole 30 días.

Cuando yo haga la query para mostrar anuncios, esta claro mostararé todos los anuncios cuyo rango de fechas esté con la actual.

Ahora viende el servicio que no se como implementar:

El cliente puede decidir entre estos dos servicios:

-Durante 10 días (a partir de la fecha de contratación del servicio) el anuncio sera subido a las 11:00h. Esto quiere decir que su anuncio a sido renovado y cada dia de ese periodo a esa hora se va a actualizar y su caducidad también será a alargada y cuando yo haga dicha query con fechas válidas será ordenada por fecha de inserción y se verá en las primeras posiciones cuando los clientes entren a partir de las 11:00h.

-El DD/MM/AAAA a las HH:MM horas subir mi anuncio, el DD/MM/AAAA a las HH:MM horas subir mi anuncio, ....

Por tanto, como tu propones en la TablaPeticionesClientes, yo no inserto una fechaHoraInicial ni fechaHoraFinal sino que inserto un periodo de diasyhora o unos diasyhoras concretos, donde la acción será una renovación del anuncio, el rango de mostrar ya lo tengo en la tabla con su fecha inserción y caducidad, pero yo quiero ofrecer al cliente la planificación de subidas los días y horas que el desee para que su anuncio ocupe las primeras posiciones.

Estoy perdido de como hacerlo, no se me ocurre nada que vea con claridad.

Saludos, y gracias por tu implicación.
  #4 (permalink)  
Antiguo 02/07/2013, 01:32
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Realizar UPDATE a partir de fecha y hora introducidas en BD

Cita:
TablaPeticionesClientes, yo no inserto una fechaHoraInicial ni fechaHoraFinal sino que inserto un periodo de diasyhora o unos diasyhoras concretos
Eso no es una contradicción?

Para mi

Cita:
...un periodo de diasyhora...
tiene una fecha y hora inicial y una final

y

Cita:
...unos diasyhoras concretos.
tambien si son consecutivos o varias si no lo son.


Cuando aclares esto seguramente te faltara crear una variable ficticia igual a cero, para todos los anuncios que no tengan prioridad y a 1 para los que deben salir primero. De manera que puedas ordenar en funcion de esa variable y de la fecha de inserción por ejemplo.

if(en periodo, 1,0) prioridad

ORDER BY prioridad DESC, fechainsercion DESC;
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 02/07/2013 a las 01:39

Etiquetas: bd, fecha, insert, sql, 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 06:58.