Foros del Web » Programando para Internet » PHP »

Vincular una fila de una tabla con una o mas filas de otra

Estas en el tema de Vincular una fila de una tabla con una o mas filas de otra en el foro de PHP en Foros del Web. Hola! A ver si logró explicarme correctamente para que me den luz sobre este problema. Tengo dos tablas en mi BD 8MySql. Una llamada Obras ...
  #1 (permalink)  
Antiguo 15/12/2008, 10:14
Avatar de Threepwood  
Fecha de Ingreso: febrero-2002
Ubicación: Argentina
Mensajes: 906
Antigüedad: 22 años, 2 meses
Puntos: 4
Vincular una fila de una tabla con una o mas filas de otra

Hola!

A ver si logró explicarme correctamente para que me den luz sobre este problema.

Tengo dos tablas en mi BD 8MySql. Una llamada Obras y otra llamada Personas. en Obras está Título y otros campos que no sean nombres propios. En Personas están todas las personas (dirctores, autores, reparto, iluminacion) que forman parte de una obra especifica. También en Personas hay un campo llamado 'id_obra' que identifica en que obra han participado y otro que es 'profesion' para saber dónde colocar el dato. A grandes ragos la tabla Nombres es así:

ID (aut_increm) - id_obra - Nombre - Profesión

Y al mostrar la ficha de la obra, hago el query asi:

Código PHP:
$query_nombre "SELECT id, id_ficha, nombre, profesion FROM autores WHERE id_ficha = '$id' AND profesion = 'autor'"
Hasta ahora todo funciona correctamente (para mi, increible). Ahora surgió el primer problema:

Hay ocasiones en que un mismo Nombre participa en dos obras, por ejemplo, dos obras del mismo dramaturgo. En ese caso, si se introduce, por ejemplo, Juan Perez de profesion dramaturgo, y ya existe, no vuelvo a insertar el registro en la tabla (esto porque cada persona va a tener su perfil).

Por lo que la pregunta es... ¿Cómo hacer para mostrar en una Obra (digamos la id=44) al dramaturgo que está en la 44 pero tambien en la 62?

Es decir, el campo ID_Obra debería tener 44, 62 pero entonces mi query ya no funcionaría...


Agradezco mucho sus sugerenciias :), también si se les ocurre una manera de reestructurar la tabla para que funcione, no hay ningun problema.


Samuel.
__________________
Equívocos sin importancia
  #2 (permalink)  
Antiguo 15/12/2008, 10:23
 
Fecha de Ingreso: octubre-2004
Mensajes: 88
Antigüedad: 19 años, 6 meses
Puntos: 2
Respuesta: Vincular una fila de una tabla con una o mas filas de otra

Hola, que tal.
En el diseño de bases de datos dice que cuando en tu diagrama Entidad Relacion dos entidades van de muchos a muchos tienes que crear una tercer entidad que se encarge de relacionar ambas.

Es decir debes de crear otra tabla nadamas para poner las relaciones, con esto ya podras hacer una query involucrando las 3 tablas.


select * from obras, personas, relacion where persona.id = relacion.persona and relacion.obra = obra.id

espero me haya dado a entender
__________________
Consejos de Programación
  #3 (permalink)  
Antiguo 15/12/2008, 10:24
Avatar de the_web_saint  
Fecha de Ingreso: mayo-2008
Ubicación: localhost/tierra/america/panama
Mensajes: 1.229
Antigüedad: 15 años, 11 meses
Puntos: 43
Respuesta: Vincular una fila de una tabla con una o mas filas de otra

Creoq ue necesitas una tabla intermedia. Creo que tienes una relacion de muchos a muchos y la solución es con una tabla que una por ejemplo el id de la persona con el id de la obra.

Saludos

EDITADO: Choque de frente compañero
__________________
..::The Saint::..
El pesimista se queja del viento; el optimista espera que cambie; el realista ajusta las velas.
  #4 (permalink)  
Antiguo 15/12/2008, 11:11
Avatar de Threepwood  
Fecha de Ingreso: febrero-2002
Ubicación: Argentina
Mensajes: 906
Antigüedad: 22 años, 2 meses
Puntos: 4
Respuesta: Vincular una fila de una tabla con una o mas filas de otra

Muchas gracias a ambos.

Nunca he hecho algo así.... esa tercera tabla que una Personas y Obras, cómo sería?

Y cómo y que datos le insertaria a esa tabla?

Muchas gracias por su ayuda

Samuel.
__________________
Equívocos sin importancia
  #5 (permalink)  
Antiguo 15/12/2008, 11:38
 
Fecha de Ingreso: abril-2008
Ubicación: Montevideo - Uruguay
Mensajes: 156
Antigüedad: 16 años
Puntos: 5
Respuesta: Vincular una fila de una tabla con una o mas filas de otra

Hi !

Seria una tabla: "obra_persona". Y almacenaria los indices de cada una de esas tablas:
- id_obra
- id_persona

Luego al hacer una consulta realizas un INNER JOIN Para levantar los resultados pertinentes.

Espero te sea util!

-ByE-
__________________
--
Mi Portfolio Online! Visitalo!
--
  #6 (permalink)  
Antiguo 15/12/2008, 11:54
Avatar de Threepwood  
Fecha de Ingreso: febrero-2002
Ubicación: Argentina
Mensajes: 906
Antigüedad: 22 años, 2 meses
Puntos: 4
Respuesta: Vincular una fila de una tabla con una o mas filas de otra

Hola, Proguri.

Crreo que ya voy entendiendo.

Entonces la tabla obra_persona se vería mas o menos así?

id_obra - id_persona
44 25
66 25


Con eso quiero decir que la persona 25 participo en la 66 y en la 44... y ya luego hago el SELECT como tu dices...


Espero que salga bien, gracias por la ayuda
__________________
Equívocos sin importancia
  #7 (permalink)  
Antiguo 15/12/2008, 12:02
 
Fecha de Ingreso: abril-2008
Ubicación: Montevideo - Uruguay
Mensajes: 156
Antigüedad: 16 años
Puntos: 5
Respuesta: Vincular una fila de una tabla con una o mas filas de otra

Hi !

Exacto, eso deberia ser más que suficiente y es el metodo más depurado de hacerlo ya que es el modelo entidad relación, cuando muchas entidades de una tabla se pueden relacionar con 1 o más de otra tabla (N a N) se debe crear una tabla intermedia que guarde los datos de los indices de las otras 2. Facil y rapido (?) jeje

Suerte con el proyecto :)

-ByE-
__________________
--
Mi Portfolio Online! Visitalo!
--
  #8 (permalink)  
Antiguo 15/12/2008, 13:33
Avatar de Threepwood  
Fecha de Ingreso: febrero-2002
Ubicación: Argentina
Mensajes: 906
Antigüedad: 22 años, 2 meses
Puntos: 4
Respuesta: Vincular una fila de una tabla con una o mas filas de otra

Hola de nuevo!

Solucioné el problema (yeii!) pero ahora ha aparecido otro :(. Siento que todo viene desd el diseño de la BD, como al final lo que me pidieron no tiene nada que ver con lo que me habían planteado en el principio, pues es como ir corrigiendo errores sobre la marcha. en fin, a ver si me pueden ayudar con esto.

Ya tengo los datos de relación en obras_personas. De manera que si la persona no existe, la agrego y la muestro en su ficha. Si existe, no la añado, siifica que ya está en otra obra y la muestro ahi también.

Ahora, en la tabla "personas" hay un campo llamado profesión. Ahi pueden ser autores, directores, escegrafos, etc. Esto me sirve para saber dónde colocar el nombre.

El problema es el siguiente: Hay veces que una misma persona es dos cosas. Por ejemplo, director y dramaturgo. Entonces ahi se me complica todo porque yo hago el query asi:

Código PHP:

$query_nombre 
"SELECT * FROM obras, personas, obra_persona WHERE personas.id = obra_persona.id_persona and obra_persona.id_obra = obras.id and personas.profesion = 'director' and obra_persona.id_obra = '$id'"
Asi voy buscando cada dato de la tabla, pero obviamente si hay un persona que hace dos cosas, el query no resulta.

Yo había pensando hacer algo asi, no se si funcionaría:


Al momento de añadir la ficha, si el nombre YA existe, tomar el registro y actualizar el campo "profesion", por ejemplo: Director Dramaturgo.

Cuando muestro la ficha hacer el Query usando, por ejemplo:

WHERE profesion LIKE '%director%'"


Funcionaría de esa manera?

Alguna otra idea, además de rehacer la base de datos?
__________________
Equívocos sin importancia
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 15:57.