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

[SOLUCIONADO] Update en varias tablas

Estas en el tema de Update en varias tablas en el foro de Mysql en Foros del Web. Hola amigos, mi me pregunta-duda es sencilla a ver si alguien me la puede aclarar: Se puede hacer un update a una base de datos ...
  #1 (permalink)  
Antiguo 11/07/2014, 00:23
 
Fecha de Ingreso: mayo-2012
Mensajes: 760
Antigüedad: 11 años, 11 meses
Puntos: 5
Update en varias tablas

Hola amigos, mi me pregunta-duda es sencilla a ver si alguien me la puede aclarar:

Se puede hacer un update a una base de datos mysql que afecte a varias tablas a la vez en la misma sentencia , es decir poniendo algo como esto:


Código MySQL:
Ver original
  1. UPDATE * SET nombre_curso = '$nombre_curso' WHERE id_curso = '$id_curso'

He probado este codigo pero no funciona.

La idea es que se actualizen en todas las tablas donde aparezca "nombre_curso" cuyo id sea "id_curso".


Me parece logico hacerlo asi pero no funciona.

y me estoy viendo haciendo 7 updates, uno para cada tabla para que actualize el nombre del curso, sino hay un alma caritativa que me aconseje como hacerlo de otra forma mejor.


Gracias de antemano a todos.
  #2 (permalink)  
Antiguo 11/07/2014, 00:53
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Update en varias tablas

No hay otra forma, si son tablas inmodb puedes usar transacciones para asegurar que se ejecuten todas o ninguna de las sentencias pero tienes que hacer las 7 consultas.

Otro tema es que un diseño donde hay la misma información en 7 tablas es candidato a revisión.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 11/07/2014, 01:11
Avatar de MaNuX0218  
Fecha de Ingreso: marzo-2014
Mensajes: 787
Antigüedad: 10 años, 1 mes
Puntos: 67
Respuesta: Update en varias tablas

La manera que utilizas es incorrecta, para actualizar varias tablas sería:

Código MySQL:
Ver original
  1. UPDATE tabla1 INNER JOIN tabla2 ON tabla1.ID = tabla2.ID SET .... WHERE ....

Espero te sirva, saludos.
  #4 (permalink)  
Antiguo 11/07/2014, 01:25
 
Fecha de Ingreso: mayo-2012
Mensajes: 760
Antigüedad: 11 años, 11 meses
Puntos: 5
Respuesta: Update en varias tablas

Cita:
Iniciado por quimfv Ver Mensaje
No hay otra forma, si son tablas inmodb puedes usar transacciones para asegurar que se ejecuten todas o ninguna de las sentencias pero tienes que hacer las 7 consultas.

Otro tema es que un diseño donde hay la misma información en 7 tablas es candidato a revisión.
Hola, no hay la misma informacion en todas las tablas pero si es obligatorio en mi caso que un campo se repita en las 7 tablas en este caso "nombre_curso"
  #5 (permalink)  
Antiguo 11/07/2014, 01:27
 
Fecha de Ingreso: mayo-2012
Mensajes: 760
Antigüedad: 11 años, 11 meses
Puntos: 5
Respuesta: Update en varias tablas

Cita:
Iniciado por quimfv Ver Mensaje
No hay otra forma, si son tablas inmodb puedes usar transacciones para asegurar que se ejecuten todas o ninguna de las sentencias pero tienes que hacer las 7 consultas.

Otro tema es que un diseño donde hay la misma información en 7 tablas es candidato a revisión.
Hola, no hay la misma informacion en todas las tablas pero si es obligatorio en mi caso que un campo se repita en las 7 tablas en este caso "nombre_curso"


Respecto a hacerlo con inner join, no lo habia pensado pero lo voy a probar.

Solo una pregunta si fueran (que lo son), 7 tablas, tendria que poner la linea de codigo que has puesto pero hasta 7 verdad.

?
  #6 (permalink)  
Antiguo 11/07/2014, 01:30
Avatar de MaNuX0218  
Fecha de Ingreso: marzo-2014
Mensajes: 787
Antigüedad: 10 años, 1 mes
Puntos: 67
Respuesta: Update en varias tablas

Con INNER JOIN podrias podrias unir las 7 tablas para la actualización de las mismas, y claro se te aria un poco extenso pero no repetirias código.

Saludos.
  #7 (permalink)  
Antiguo 11/07/2014, 01:34
 
Fecha de Ingreso: mayo-2012
Mensajes: 760
Antigüedad: 11 años, 11 meses
Puntos: 5
Respuesta: Update en varias tablas

Soy novato, a ver si lo he entendo:

si quisiera actualizar 3 tablas, por ejemplo, seria asi?

Código SQL:
Ver original
  1. UPDATE tabla1 INNER JOIN tabla2 INNER JOIN tabla3 ON tabla1.ID = tabla2.ID = tabla3.ID SET .... WHERE ....


¿Seria asi, estaria bien escrito asi?
  #8 (permalink)  
Antiguo 11/07/2014, 01:43
Avatar de MaNuX0218  
Fecha de Ingreso: marzo-2014
Mensajes: 787
Antigüedad: 10 años, 1 mes
Puntos: 67
Respuesta: Update en varias tablas

Te recomiendo antes que leas el manual.

http://dev.mysql.com/doc/refman/5.0/es/join.html

La consulta seria así, un ejemplo:

Código MySQL:
Ver original
  1. UPDATE tablaA as A INNER JOIN tablaB as B ON A.campoA=B.campoB SET A.campoA=valor WHERE condicion....

Saludos.
  #9 (permalink)  
Antiguo 11/07/2014, 02:13
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Update en varias tablas

Teneis toda la razón.

Manual

Cita:
Puede realizar operaciones UPDATE que cubran varias tablas. La parte table_references lista las tablas involucradas en el join. Su sintaxis se describe ámpliamente en Sección 13.2.7.1, “Sintaxis de JOIN”. Aquí hay un ejemplo:

UPDATE items,month SET items.price=month.price
WHERE items.id=month.id;

Este ejemplo muestra un inner join usando el operador coma, pero los comandos UPDATE de múltiples tablas pueden usar cualquier tipo de join permitido en comandos SELECT tales como LEFT JOIN.
Código MySQL:
Ver original
  1. UPDATE tabla1
  2.                 INNER JOIN tabla2 ON tabla1.ID = tabla2.ID
  3.                 INNER JOIN tabla3 ON tabla1.ID = tabla3.ID
  4. SET ....
  5. WHERE ....

Ojo con INNER JOIN si una tabla no contiene uno de los casos no se actualizara ninguna

Código MySQL:
Ver original
  1. UPDATE tabla1
  2.                 LEFT JOIN tabla2 ON tabla1.ID = tabla2.ID
  3.                 LEFT JOIN tabla3 ON tabla1.ID = tabla3.ID
  4. SET ....
  5. WHERE ....

Si tabla 1 es la que tiene todos los registros.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #10 (permalink)  
Antiguo 11/07/2014, 02:20
Avatar de MaNuX0218  
Fecha de Ingreso: marzo-2014
Mensajes: 787
Antigüedad: 10 años, 1 mes
Puntos: 67
Respuesta: Update en varias tablas

Pues ya lo tienes, quimfv te lo a explicado perfectamente, solo echale un ojo al manual para ver mejor su funcionamiento.

Saludos.
  #11 (permalink)  
Antiguo 11/07/2014, 02:35
 
Fecha de Ingreso: mayo-2012
Mensajes: 760
Antigüedad: 11 años, 11 meses
Puntos: 5
Respuesta: Update en varias tablas

Ya lo he entendido a la perfección.

Gracias a todos.

Solo una cosa que me ha hecho inquietarme de lo que os he leido.

Y que puede ser que no lo haya explicado bien.


El tema es que "nombre de curso" es un campo que esta en 7 tablas.

Pero a la la hora de actualizar dicho campo con un nombre de curso en concreto, solo debe actualizarse en una de las 7 tablas y no en las 7 a la vez por que debe cumplirse una condicion.

Un ejemplo :

7 tablas, donde cada una de ellas tiene el campo "nombre_curso".

tabla 1: cursos de idiomas

tabla 2: cursos de cocina

tabla 3: cursos de bricolaje

tabla 4: cursos de mecanica

tabla 5: cursos de moda

tabla 6: cursos de ingenieria

tabla 7: cursos de ofimatica


ENTONCES A La hora de actualizar el nombre de un curso en la sentencia sql debe buscar en las 7 tablas el nombre del curso donde se cumple la condicion y actualizando el campo "nombre_curso" de la tabla idonea.
  #12 (permalink)  
Antiguo 11/07/2014, 04:22
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Update en varias tablas

Creo que no es lo que estamos suponiendo en las respuestas que te hemos dado....

Yo insistiria en revisar ese diseño. Tan diferentes son los registros de cada tipo de curso? para justificar un tabla para cada tipo?
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #13 (permalink)  
Antiguo 11/07/2014, 05:10
 
Fecha de Ingreso: mayo-2012
Mensajes: 760
Antigüedad: 11 años, 11 meses
Puntos: 5
Respuesta: Update en varias tablas

cada tabla de son categorias de cursos diferentes

ejem:

tabla 1: llamada categoria_administracion_empresa

tabla 2:llamada categoria_formacion_laboral

tabla 3:llamada categoria_habilidades_directivas

.
.
.
asi hasta 7 tablas

en cada una de ellas hay :

id_curso
nombre_curso
contenido tema 1
contenido tema 2
contenido tema 3
contenido tema 4
contenido tema 5



con lo cual los cursos de una categoria son diferentes a los de las 6 categorias (tablas) restantes.


mediantes claves foraneas y un panel administrador que estoy haciendo, selecciono la categoria adecuada y un curso en cuestion.

y mediante update debo actualezar el "nombre_curso" de esa categoria en concreto.

espero que este mas claro ahora

el sistema funciona bien, actualiza bien, pero la duda que tengo es la de en vez de poner 7 updates, pues poner solo un update que concadene de alguna manera las 7 tablas y actualize

cuando llegue le momento de actualizar, el nombre_curso de la tabla "categoria" que se le indique .
  #14 (permalink)  
Antiguo 11/07/2014, 05:37
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, 4 meses
Puntos: 2658
Respuesta: Update en varias tablas

El "sistema" te funcionará bien, pero está mal diseñado. Tiene un nivel de abstracción muy bajo, deficiente, y con grandes problemas de flexibilidad para cosas como las que (precisamente) te está causando inconvenientes.
Tu estás viendo los cursos como entidades diferentes, en lugar de abstraer el curso y diferenciar sus herencias, determinar los dominios de cada atributo y construir las generalizaciones necesarias.
Lo que yo veo es que estás confundiendo los datos contenidos en las tablas, con las entidades. El hecho de que tenas N cursos que poseen contenidos diferentes, no implica que no se pueda manejar todo el sistema y sus diferentes características con media docena de tablas, correctamente diseñadas.
Para que te quede claro, una Universidad tiene muchísimas asignaturas y cursos más de los que describes, con características muy distintas entre si, y no por eso crea una tabla por curso... No lo necesita.

Yendo al punto, siendo tablas diferentes, sin relaciones definidas por dependencia funcional, no hay modo de evitar tener que hacer siete (7) procesos para verificar cada una, y eventualmente realizar otros tantos UPDATEs. No al menos con un diseño de datos como el que nos estás describiendo.

El consejo que te podemos dar es que te detengas, reestructures esa base a un modelo mejor diseñado, y recién entonces avances. Todo el tiempo que tardes en corregir esa cosa lo ganarás luego en eficiencia de programación y desarrollo de la aplicación.
De todos modos, luego tendrás que hacerlo, porque en algún punto perderás control del sistema por la ineficiencia del modelo de datos.

Pero, claro, es tu decisión.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #15 (permalink)  
Antiguo 11/07/2014, 05:38
Avatar de MaNuX0218  
Fecha de Ingreso: marzo-2014
Mensajes: 787
Antigüedad: 10 años, 1 mes
Puntos: 67
Respuesta: Update en varias tablas

Y por que no creas una tabla para esas siete tablas, nose si me explico por ejemplo:

TABLA_CATEGORIAS
id
nombre_categoria

Y añadir en la otra tabla

id_categoria
id_curso
nombre_curso
contenido tema 1
contenido tema 2
contenido tema 3
contenido tema 4
contenido tema 5

Saludos.
  #16 (permalink)  
Antiguo 11/07/2014, 05:40
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, 4 meses
Puntos: 2658
Respuesta: Update en varias tablas

"Contenido Tema", en ese esquema, es una tabla diferente, donde se relacionan Curso y Tema, con un discriminante para el contenido. Además el "Nomrbe Curso" es redundante, y provocará problemas de consistencia.
Por favor, recordar las bases del modelo Entidad-Relación y la Normalización de Bases de Datos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #17 (permalink)  
Antiguo 11/07/2014, 05:47
Avatar de MaNuX0218  
Fecha de Ingreso: marzo-2014
Mensajes: 787
Antigüedad: 10 años, 1 mes
Puntos: 67
Respuesta: Update en varias tablas

Cierto gnzsoloyo, pero yo le e dado una idea para que reflexione y aga cambios en la DB.

Un saludo.
  #18 (permalink)  
Antiguo 11/07/2014, 06:52
 
Fecha de Ingreso: mayo-2012
Mensajes: 760
Antigüedad: 11 años, 11 meses
Puntos: 5
Respuesta: Update en varias tablas

Bueno, relax todos.

Entiendo a todos. Creo que lo mejor sera poner exactamente detalladamente lo que en mi base de datos hay sobre este tema. asi todo estara aun mas claro de lo que ya lo he detallado:

existen 8 tablas.

tabla 1: llamada categorias_cursos

campos:

id_categoria_curso
id_categoria_foranea
titulo_categoria
comentario_principal

y ahora las 7 tablas cuyo contenido detallo:

tabla2: categoria_administracion_empresa

tabla3: categoria_formacion_laboral

tabla4: categoria_habilidades_directivas

tabla5:categoria_idiomas

tabla6: categoria_informatica_internet

tabla7: categoria_otras_tematicas

tabla8: categoria_ventas_marketing


bien en cada una de estas 7 tablas de categorias hay los siguientes campos:

campos:

id_curso
id_categoria_foranea
nombre_curso
comentario
tema_1
tema_2
tema_3
.
.
..
.tema_10


Bien dicho esto la manera de actualizar por ejemplo el nombre del curso 5 , de la categoria 3 seria:


que actualice "nombre_curso" allá donde en la tabla x tenga la condicion de tener como clave foranea el valor N y tener tambien como id_curso el valor M


Asi es como lo tengo montado exactamente.
  #19 (permalink)  
Antiguo 11/07/2014, 06:56
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Update en varias tablas

Tablas

Cursos
idCursos PK
nombreCurso
idTpCursos FK

TpCursos
idTpCursos PK
tpCursos

Temas
idTemas PK
titulo
contenido

RelCursoTema
idRelCursoTema PK
idCursos FK
idTemas FK

Con estas cuatro tablas bien relacionadas solucionas el problema y no tedrías ni que plantearte el problema que ha abierto este hilo, y los temas repetidos entre cursos no tendrías porque guardarlos n veces.

Lo mas bueno del caso es que la misma estructura sirve para 1 tipo de cursos que para 1000 y un tema pro curso o 1000 temas. Y cursos con distinto numero de temas sin perder espacio en temas sin contenido..
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 11/07/2014 a las 07:03
  #20 (permalink)  
Antiguo 11/07/2014, 07:09
 
Fecha de Ingreso: mayo-2012
Mensajes: 760
Antigüedad: 11 años, 11 meses
Puntos: 5
Respuesta: Update en varias tablas

Muchas gracias quimfv.

Si antes lo veia claro, ahora se ha despejado cualquier sombre de duda.

Un saludo.

Etiquetas: sql, tabla, tablas, 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 00:44.