Ver Mensaje Individual
  #2 (permalink)  
Antiguo 01/07/2013, 02:40
quimfv
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 2 meses
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