PHP - Update con dos tablas relacionadas

 
Vista:
sin imagen de perfil
Val: 22
Ha disminuido su posición en 99 puestos en PHP (en relación al último mes)
Gráfica de PHP

Update con dos tablas relacionadas

Publicado por Eduardo (22 intervenciones) el 19/02/2017 19:36:31
Hola muy buenas tardes, tengo una duda que ojala se pueda solucionar
Les cuento, tengo dos tablas relacionadas una llamada envio y otra llamada factura
dos-tablas

Estas dos tablas están relacionadas, la tabla envio es la tabla mandante y la tabla factura es la que se encuentra relacionada con clave foránea en cascada
relacion

Las dos tablas tienen los campos fecha y tipoProducto
El producto 1 se envía dentro en un rango de fechas
El producto 2 se envía en otro rango de fechas, pero hay veces que se cruzan estas fechas y son el mismo dia
Y así sucesivamente con otros productos pero, el ejemplo con dos productos creo que está bien.

Mi problema es que al actualizar la fecha en la tabla envio del producto tipo 1, se ejecuta bien en dicha tabla, pero en la tabla relacionada factura me actualiza y cambia todas las fechas que son del mismo dia sin importar que el producto sea distinto

Aquí unas fotos
error-se-cambian-simultaneas

Lo que no puedo hacer es que si en la tabla envio se cambia la fecha del producto tipo 1 solo se cambie dicha fecha en la tabla factura, y no las dos fechas de la tabla factura como se muestra en la foto anterior ya que el tipoProducto es distinto.

y este es mi codigo php, con el que se actualizan las fechas (UPDATE)
1
2
3
UPDATE envio SET fecha=DATE_ADD(fecha,INTERVAL 20 DAY) WHERE fecha BETWEEN '2017-01-01' AND '2017-02-18' AND tipoProducto= '1';
 
UPDATE envio SET fecha=DATE_ADD(fecha,INTERVAL 20 DAY) WHERE fecha BETWEEN '2017-02-19' AND '2017-07-16' AND tipoProducto = '2';

en la tabla envio funciona bien , pero al momento de ver la tabla relacionada fecha ,ahí es el problema ya que me actualiza una fecha que no corresponde

Por favor, si me pueden ayudar , he estado varios días y no encuentro la manera de que la tabla fecha repita lo mismo que esta expresado en la tabla envio

Saludos cordiales.
desde ya muchas gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 191
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Update con dos tablas relacionadas

Publicado por Brayan (76 intervenciones) el 21/02/2017 16:10:30
No estoy seguro pero esto deberia funcionar:

1
UPDATE envio SET envio.fecha=DATE_ADD(fecha,INTERVAL 20 DAY)= factura.fecha=DATE_ADD(fecha,INTERVAL 20 DAY) FROM envio JOIN factura where envio.fecha BETWEEN '2017-01-01' AND '2017-02-18' AND tipoProducto= '1';

Siguiendo ese sql realiza el otro.

Sino te funciona me avisas. no soy muy bueno en sql, pero creo que asi se actualizan ambas
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 22
Ha disminuido su posición en 99 puestos en PHP (en relación al último mes)
Gráfica de PHP

Update con dos tablas relacionadas

Publicado por Eduardo (22 intervenciones) el 22/02/2017 00:30:24
Estimado Brayan desde ya muchas gracias por darte el tiempo de leer mi problema, y de responder.

Ejecute el código , he incluso hice un evento en phpMyAdmin que se ejecutara cada 5 min y ver si cambiaba la fecha del producto 1 y me arrojo este error de sintaxis.

1064-error
Cuando lo ejecute.

De todas formas muchas gracias Brayan por ayudarme a tratar de solucionar esta problematica.
Saludos cordiales.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Update con dos tablas relacionadas

Publicado por xve (6935 intervenciones) el 22/02/2017 08:13:43
Hola Eduardo, creo que Brayan, por error, te puso un igual en vez de una coma, y en el JOIN se olvido la clausula ON... prueba así:
1
2
3
4
5
UPDATE envio SET
   envio.fecha=DATE_ADD(fecha,INTERVAL 20 DAY),
   factura.fecha=DATE_ADD(fecha,INTERVAL 20 DAY)
FROM envio JOIN factura ON envio.nombre=factura.nombre
WHERE envio.fecha BETWEEN '2017-01-01' AND '2017-02-18' AND tipoProducto= '1';

La relación de las tablas por el nombre no es muy correcto, ya que como sabes, se puede repetir!!! lo suyo seria utilizar un id autonumerico único.

Espero que te sirva
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 22
Ha disminuido su posición en 99 puestos en PHP (en relación al último mes)
Gráfica de PHP

Update con dos tablas relacionadas

Publicado por Eduardo (22 intervenciones) el 25/02/2017 01:33:22
Estimado Xve al igual que a Brayan muchas gracias por leer y darse el tiempo de responder a mi problema
tomare tu consejo y voy a crear otro campo llamado idProducto

Saludos cordiales
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Update con dos tablas relacionadas

Publicado por xve (6935 intervenciones) el 25/02/2017 19:32:15
Creo que es una buena decisión!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar