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

Como relacionar 3 tablas

Estas en el tema de Como relacionar 3 tablas en el foro de Bases de Datos General en Foros del Web. Hola amigos quería saber como relacionar estas 3 tablas con el Inner Join FACTURAV nfactura id_fv (PK) id_s fvmonto fechaf DFACTURAV id_av (PK) id_r (FK) ...
  #1 (permalink)  
Antiguo 21/11/2013, 10:48
 
Fecha de Ingreso: octubre-2013
Ubicación: Caracas
Mensajes: 24
Antigüedad: 10 años, 5 meses
Puntos: 0
Pregunta Como relacionar 3 tablas

Hola amigos quería saber como relacionar estas 3 tablas con el Inner Join

FACTURAV
nfactura
id_fv (PK)
id_s
fvmonto
fechaf

DFACTURAV
id_av (PK)
id_r (FK)
id_fv (FK)
cantidad
montoav

REPUESTOS
id_r (PK)
codigo_r
pieza
descripcion
costo
cantidad


La cuestion es que yo obtengo el id_fv y de ahí tengo que consultar en la tabla nfactura
fvmonto
cantidad (DFACTURAV)
id_r (DFACTURAV)

y de esos id_r sacar sus campos
pieza
costo
cantidad ( actualizar)

Por eso necesito unir las 3 para no tener que hacer las consultas por separado que ahora lo tengo así. Saludos y Muchas Gracias :P
  #2 (permalink)  
Antiguo 21/11/2013, 11:01
Avatar de h2swider  
Fecha de Ingreso: julio-2007
Ubicación: Ciudad de Buenos Aires
Mensajes: 932
Antigüedad: 16 años, 9 meses
Puntos: 194
Respuesta: Como relacionar 3 tablas

Implícito
Código SQL:
Ver original
  1. SELECT *
  2. FROM FACTURAV a,
  3.  DFACTURAV b,
  4.  REPUESTOS c
  5. WHERE a.id_fv=b.id_fv
  6.  AND b.id_r=c.id_r

explícito
Código SQL:
Ver original
  1. SELECT *
  2. FROM FACTURAV a
  3.  INNER JOIN DFACTURAV b ON  a.id_fv=b.id_fv
  4.  INNER JOIN REPUESTOS c ON b.id_r=c.id_r

Te convendría leer este articulo. Hacer un join es de lo mas básico en ansi sql
http://dev.mysql.com/doc/refman/5.0/es/join.html
__________________
Codifica siempre como si la persona que finalmente mantedra tu código sea un psicópata violento que sabe donde vives

Última edición por h2swider; 21/11/2013 a las 11:07
  #3 (permalink)  
Antiguo 21/11/2013, 21:19
 
Fecha de Ingreso: octubre-2013
Ubicación: Caracas
Mensajes: 24
Antigüedad: 10 años, 5 meses
Puntos: 0
Respuesta: Como relacionar 3 tablas

Hola gracias por la ayuda, :D aunque estoy super confundido lo que pasa es que estoy aprendiendo como quien se dice a los trancazos no tengo conocimientos previos. La cosa es que si yo tengo id_fv = 20 que lo tomo de un post de la factura una vez que hago ese inner join como consulto en la tabla DFACTURA los id_r que tengo relacionado a ese id_fv que pueden ser varios y luego que tengo eso se que con un for teniendo los id_r como consultaria los campos de id_r con esta relacion del mismo inner join :D, gracias y disculpa
  #4 (permalink)  
Antiguo 22/11/2013, 08:50
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Como relacionar 3 tablas

????????? te puedes explicar con peras y manzanas???
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 22/11/2013, 11:08
Avatar de h2swider  
Fecha de Ingreso: julio-2007
Ubicación: Ciudad de Buenos Aires
Mensajes: 932
Antigüedad: 16 años, 9 meses
Puntos: 194
Respuesta: Como relacionar 3 tablas

Cita:
Iniciado por Libras Ver Mensaje
????????? te puedes explicar con peras y manzanas???
Yo tampoco entendí lo que quiere.
__________________
Codifica siempre como si la persona que finalmente mantedra tu código sea un psicópata violento que sabe donde vives
  #6 (permalink)  
Antiguo 23/11/2013, 09:26
 
Fecha de Ingreso: octubre-2013
Ubicación: Caracas
Mensajes: 24
Antigüedad: 10 años, 5 meses
Puntos: 0
Respuesta: Como relacionar 3 tablas

Ok xD a ver si me entienden; la cuestión es que cuando voy a grabar la factura yo me voy a traer el id_fv --> id de la factura que lo meto en la variable $id_fv, va a tener un valor numérico, ahora mi pregunta es necesariopara tener todos los datos de esa factura usar el Where así:
Código MySQL:
Ver original
  1. FROM FACTURAV a
  2. INNER JOIN DFACTURAV b ON  a.id_fv=b.id_fv
  3. INNER JOIN REPUESTOS c ON b.id_r=c.id_r
  4. WHERE id_fv='$id_fv'

y luego para saber el valor de los campos de las diferentes tablas lo llamo
Cita:
Editado: Código de programación no permitido en foros de Bases de Datos. Sólo SQL. Leer las normas del foro, por favor.
Eso quería saber xD, a ver si así me pueden ayudar

Última edición por gnzsoloyo; 23/11/2013 a las 14:15 Razón: Codigo de
  #7 (permalink)  
Antiguo 23/11/2013, 11:15
 
Fecha de Ingreso: octubre-2013
Ubicación: Caracas
Mensajes: 24
Antigüedad: 10 años, 5 meses
Puntos: 0
Respuesta: Como relacionar 3 tablas

Lo probe en la consulta de sql y no me sirvio :(
  #8 (permalink)  
Antiguo 23/11/2013, 11:40
 
Fecha de Ingreso: octubre-2013
Ubicación: Caracas
Mensajes: 24
Antigüedad: 10 años, 5 meses
Puntos: 0
Respuesta: Como relacionar 3 tablas

Así lo tengo ahora
Código MySQL:
Ver original
  1. SELECT id_r, cantidad, preciou FROM dfacturav WHERE id_fv='$id_facv'
  2.  
  3. SELECT * FROM repuestos WHERE id_r='$reg[id_r]'
  4.  
  5. SELECT SUM(preciou) as totalsiniva FROM dfacturav WHERE id_fv='$id_facv'
Cita:
Editado: Código de programación no permitido en foros de Bases de Datos. Sólo SQL. Leer las normas del foro, por favor.

Última edición por gnzsoloyo; 23/11/2013 a las 14:16 Razón: Codigo de programacion no permitido en foros de BBDD
  #9 (permalink)  
Antiguo 23/11/2013, 14:27
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: Como relacionar 3 tablas

Cita:
Iniciado por alemaxxx Ver Mensaje
Ok xD a ver si me entienden; la cuestión es que cuando voy a grabar la factura yo me voy a traer el id_fv --> id de la factura que lo meto en la variable $id_fv, va a tener un valor numérico, ahora mi pregunta es necesariopara tener todos los datos de esa factura usar el Where así:
Código MySQL:
Ver original
  1. FROM FACTURAV a
  2. INNER JOIN DFACTURAV b ON  a.id_fv=b.id_fv
  3. INNER JOIN REPUESTOS c ON b.id_r=c.id_r
  4. WHERE id_fv='$id_fv'

y luego para saber el valor de los campos de las diferentes tablas lo llamo


Eso quería saber xD, a ver si así me pueden ayudar
SI preguntas si para traer todo el detalle de una factura, debes hacer un JOIN entre la cabecera de la factura con su detalle, la respuestas es SI. Es el modo.
Ahora bien si la pregunta es si debes hacer ESA consulta en base a TU modelo de datos... la respuesta es NO, por dos razones:
1) El modelo de datos está mal creado para el caso.
2) No puedes poner en una misma tabla el detalle de reparaciones junto con los insumos d euna reparación. Es irreal, porque la relación puede no ser 1:N sino 0:N, lo que forzosamente requiere un planteo completamente distinto.

Lo explico de esta forma:
Si toda reparación implica un único insmo de repuestos, el INNER JOIN te funcionará bien. Pero si algunas tienen cero insumos, entonces con un INNER JOIN no obtendrías el item reparado en la factura... porque no existen insumos.
Esa sería una situación de relación opcional, no mandatoria, y la consulta requiere LEFT JOIN, no INNER JOIN, con control de nulos.

Por otro lado, si un mismo item facturado requiere N insumos de repuesto, entonces tanto el item facturado como la reparación se repetirá N veces, una por cada item de repuestos necesario.
Ese caso sería un INNER JOIN, pero generaría errores de calculo.

Ahora bien, ¿cómo se soluciona ese? Pues sigue siendo un INNER JOIN, pero agrupado y con ROLLUP, o bien lo implementas en forma parcial entre SQL y programación (nota: NO postees código de programación en este foro, esos temas tienen su propio foro).
Eso, o bien haces lo que se suele hacer: Dos consultas diferentes: una para el detalle de las reparaciones y otra para los insumos facturados, ambas combinadas con un UNION.
Lo que en este último contexto está mal es el esquema de datos, y la forma en que construyes la consulta, porque los repuestos son parte de los items de la factura.

El tema no es sencillo, desde ya, y puede requerir más tablas para poder hacer una aplicación correctamente diseñada, optimizable y eficiente.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #10 (permalink)  
Antiguo 23/11/2013, 22:05
 
Fecha de Ingreso: octubre-2013
Ubicación: Caracas
Mensajes: 24
Antigüedad: 10 años, 5 meses
Puntos: 0
Respuesta: Como relacionar 3 tablas

Ah ok es que no tengo idea soy nuevo en esto, solo puse el código entero para que me puedan comprender mejor, y no entiendo a que te refieres con facturado, solo es una facturación. XD Explico más o menos a ver, aunque de igual forma lo que explicaste no sé usarlo.
Cuando hago ingreso de la factura lo primero que guardo es FACTURAV; aquí tiene el numero de factura que se genera automático nfactura, ese lo diseñe yo, el id_fv, que es el id de la factura que se incrementa y es (PK), el id_s, que esta relacionado al numero del cliente que es un (FK) la fechaf, momento para el cual se crea la factura, esta fecha la toma del servidor y fvmonto es el total de esa factura.

FACTURAV
nfactura
id_fv (PK)
id_s
fvmonto
fechaf

Luego guardo el detalle de la factura DFACTURAV, es decir los items o repuestos que estan en esta factura , por ejemplo caucho, rines, bobina, etc....
Entonces tengo un id_av que es el id del articulo (PK), id_fv(FK) que este es el id de la factura que esta asociado, con esto voy a saber todos los items que estan en la factura..., id_r (FK) donde me dice a que repuesto esta asociado si es un caucho o es un rotor o la bobina, la cantidad para saber cuantas estoy vendiendo y entonces asi actualizar mi inventario y el costo ,es el costo unitario del producto por el cual estoy vendiendo...

DFACTURAV
id_av (PK)
id_r (FK)
id_fv (FK)
cantidad
montoav

REPUESTOS
id_r (PK)
codigo_r
pieza
descripcion
costo
cantidad

Solo para efectos de impresión entonces aparte de tomar datos de la tabla anterior en Repuestos tomo por ejemplo la descripción del repuesto para mostrarla en la factura y su codigo_r que es un código que yo genero...

A ver si con esto va mejor xD y me pueden decir como puedo optimizar la consulta o la dejo como la tenía ....
Saludos y muchas gracias

Etiquetas: fecha, php, relacionar, tabla, tablas
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 11:04.