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

[SOLUCIONADO] Reporte de tablas

Estas en el tema de Reporte de tablas en el foro de Mysql en Foros del Web. Buenos días amigos, esta es la situación: Tengo una tabla llamada Item con columnas e info como: id-----descripcion-----idgrupo---formapago----tipoitem 01----cuarto simple--hos-------D---------------H 02----cuarto doble---hos-------C----------------H 03----desayuno------ali---------D----------------C 04----cheque---------fpag------C----------------P La ...
  #1 (permalink)  
Antiguo 05/05/2015, 08:48
 
Fecha de Ingreso: septiembre-2009
Ubicación: Cuenca
Mensajes: 57
Antigüedad: 14 años, 7 meses
Puntos: 3
Pregunta Reporte de tablas

Buenos días amigos, esta es la situación:

Tengo una tabla llamada Item con columnas e info como:

id-----descripcion-----idgrupo---formapago----tipoitem

01----cuarto simple--hos-------D---------------H
02----cuarto doble---hos-------C----------------H
03----desayuno------ali---------D----------------C
04----cheque---------fpag------C----------------P

La tabla Parametro con la siguiente información

gopc-----------opc----dscr

tipoitem-------H------Habitacion
tipoitem-------C------Consumo
tipoitem-------P-------Pago
formapago----D------Debito
formapago----C------Credito

Y por último la tabla Grupoitem con la siguiente información:

idgrupo-----nbre

hos---------Hospedaje
ali-----------Alimentacion
fpag--------Forma de pago

Quiero un resultado que muestre prácticamente la primera tabla, item, pero así:

id----descripcion-----idgrupo-----------formapago---tipoitem

01---cuarto simple--Hospedaje--------Debito--------Habitacion
02---cuarto doble----Hospedaje-------Credito--------Habitacion
03---desayuno-------Alimentacion----Debito--------Consumo
04---cheque----------Forma de pago--Credito-------Pago

Mi problema es con la tabla Parametro, ya que una columna de Item se llama tipoitem y solo debe tomar valores de este tipo en Parametro, otra columna de Item solo debe tomar valores de formapago de la misma tabla Parametro.

¡Gracias comunidad!
  #2 (permalink)  
Antiguo 05/05/2015, 09:02
 
Fecha de Ingreso: septiembre-2009
Ubicación: Cuenca
Mensajes: 57
Antigüedad: 14 años, 7 meses
Puntos: 3
Respuesta: Reporte de tablas

Amigos si lo necesitan, ya solucioné, muchas gracias por su atención:

select i.item, i.descripcion, i.idgrupo, g.nbre, i.tipoitem, p.dscr, i.formapago, pp.dscr
from item i left join grupoitem g on (i.idgrupo=g.idgrupo)
left join Parametro p on (p.gopc='tipoitem' and i.tpit=p.opc)
left join Parametro pp on (pp.gopc='formapago' and i.decr=pp.opc);
  #3 (permalink)  
Antiguo 05/05/2015, 09:12
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: Reporte de tablas

con inner join podrias hacer lo que necesitas, pero tus tablas estan mal normalizadas....asi como estan no se puede obtener los valores que pides, tendrias que cambiar las estructura de tus tablas por algo como esto:

la tabla parametro, podriamos sacar 2 tablas 1 que sea tipo item y la otra que sea forma pago

tipo_item
id-------Desc
1-----Habitacion
2----consumo
3----Pago

Forma_pago
id------desc
1----Debito
2----Credito



Y tu tabla item quedaria:

id-----descripcion-----idgrupo---idformapago----idtipoitem

01----cuarto simple--hos-------1---------------1
02----cuarto doble---hos-------2----------------1
03----desayuno------ali---------1----------------2
04----cheque---------fpag------2----------------3


Código SQL:
Ver original
  1. SELECT t1.id,t1.descripcion,t2.nbre,t3.DESC,t4.DESC FROM item AS t1
  2. INNER JOIN Grupoitem  AS t2 ON (t1.idgrupo=t2.idgrupo)
  3. INNER JOIN Forma_pago AS t3 ON (t1.idformapago=t3.id)
  4. INNER JOIN tipo_itemas t4 ON (t1.idtipoitem=t4.id)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #4 (permalink)  
Antiguo 05/05/2015, 14:06
 
Fecha de Ingreso: septiembre-2009
Ubicación: Cuenca
Mensajes: 57
Antigüedad: 14 años, 7 meses
Puntos: 3
Respuesta: Reporte de tablas

Libras muchas gracias por tu sugerencia, quizá tengas mucha razón sin embargo las tablas me las dieron para trabajar sobre ellas con cientos de miles de registros en algunas de ellas y tenía que dar una respuesta rápida hoy mismo, la solución que escribí más arriba que es:

select i.item, i.descripcion, i.idgrupo, g.nbre, i.tipoitem, p.dscr, i.formapago, pp.dscr
from item i left join grupoitem g on (i.idgrupo=g.idgrupo)
left join Parametro p on (p.gopc='tipoitem' and i.tpit=p.opc)
left join Parametro pp on (pp.gopc='formapago' and i.decr=pp.opc);

Me permite hacer lo que busco, hice un 'explain' de esta orden para ver qué tan eficiente es y resulta una excelente opción ya que solamente recorre todos los registros de la tabla principal ITEM y en las demás tablas directamente a un registro por cada una de ellas, es decir que se trata de una orden sumamente óptima, bajo la deficiencia de las tablas presentadas a mi.

Un saludo y te agradezco infinitamente
  #5 (permalink)  
Antiguo 05/05/2015, 14:36
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: Reporte de tablas

Cita:
Iniciado por pancho2413 Ver Mensaje

Me permite hacer lo que busco, hice un 'explain' de esta orden para ver qué tan eficiente es y resulta una excelente opción ya que solamente recorre todos los registros de la tabla principal ITEM y en las demás tablas directamente a un registro por cada una de ellas, es decir que se trata de una orden sumamente óptima, bajo la deficiencia de las tablas presentadas a mi.

Un saludo y te agradezco infinitamente
No creo que sea lo mas optimo dado el tipo de consulta que estas haciendo...pero si te funciona perfecto, pense en la misma solucion que tienes, pero revisando bien el modelo de tablas que manejas no seria lo mas optimo........
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Etiquetas: join, 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 20:48.