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

Consulta en MySQL para mostrar los registros de 2 tablas de forma horizontal

Estas en el tema de Consulta en MySQL para mostrar los registros de 2 tablas de forma horizontal en el foro de Mysql en Foros del Web. Hola a todos. Tengo un problema con el que espero que me puedan ayudar. Tengo 2 tablas en MySql con relación de uno a muchos ...
  #1 (permalink)  
Antiguo 12/04/2016, 22:33
 
Fecha de Ingreso: diciembre-2013
Ubicación: Colombia
Mensajes: 8
Antigüedad: 10 años, 4 meses
Puntos: 0
Pregunta Consulta en MySQL para mostrar los registros de 2 tablas de forma horizontal

Hola a todos.

Tengo un problema con el que espero que me puedan ayudar. Tengo 2 tablas en MySql con relación de uno a muchos y necesito mostrar la información de las 2 tablas de forma horizontal. Las tablas son:
  • tbl_clientes: cli_id, cli_nombre, cli_ciudad, cli_direccion, cli_email
  • tbl_telefonos: tel_id, cli_id, tel_numero, tel_status

Para poner un ejemplo, digamos que en las tablas tengo los siguientes registros

tbl_clientes
Código:
cli_id| cli_nombre        | cli_ciudad | cli_direccion | cli_email
1     | Nombre prueba     | Miami      | 50 Av         | [email protected]
2     | Pepe Perez        | Tampa      | 12 St         | [email protected]
tbl_telefonos
Código:
tel_id | cli_id | tel_numero | tel_status
1      | 1      | 1235468    | 1
2      | 1      | 3214569    | 1
3      | 2      | 4563218    | 1
4      | 2      | 8796542    | 1
5      | 2      | 6539842    | 1

Lo que necesito es hacer una consulta que muestre la información de la siguiente forma:
Código:
cli_id| cli_nombre        | cli_ciudad | cli_direccion | cli_email       | tel_numero1 | tel_numero2 | tel_numero3
1     | Nombre prueba     | Miami      | 50 Av         | [email protected]   | 1235468     | 3214569     | Null
2     | Pepe Perez        | Tampa      | 12 St         | [email protected] | 4563218     | 8796542     | 6539842
La verdad es que siempre muestro la información de esta forma usando el lenguaje de programación con el que esté trabajando, pero esta vez me veo obligado a hacerlo directamente desde la consulta y no tengo idea como hacerlo. Les agradecería mucho si me pudieran ayudar con esto.
  #2 (permalink)  
Antiguo 13/04/2016, 05:16
 
Fecha de Ingreso: abril-2016
Ubicación: C:\Usuarios\isaac
Mensajes: 33
Antigüedad: 8 años, 1 mes
Puntos: 1
Respuesta: Consulta en MySQL para mostrar los registros de 2 tablas de forma horizont

Prueba con esta consulta a ver si te sirve (utilizacion de INNER JOIN):

Código MySQL:
Ver original
  1. select * from tbl_clientes inner join tbl_telefonos on tbl_telefonos.cli_id=tbl.clientes.cli_id;

espero que te sirva, un saludo
__________________
"He intentado cambiar el mundo, pero no he encontrado el código fuente"
  #3 (permalink)  
Antiguo 13/04/2016, 06:02
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, 5 meses
Puntos: 2658
Respuesta: Consulta en MySQL para mostrar los registros de 2 tablas de forma horizont

Esa es la consulta base, pero no es la solución.
Para poder desplegar horizontalmente los teléfonos de cada cliente en una columna separada, tienes que agregar un INNER JOIN por cada teléfono adicional que haya, tomando como referencia la cantidad de telefonos que tenga el cliente con mayor cantidad de ellos.
¿Se entiende bien?
Esto quiere decir que si tienes dos teléfonos en un cliente, pones dos INNER JOIN:

Código SQL:
Ver original
  1. SELECT
  2.     cl.cli_id,  
  3.     cl.cli_nombre,  
  4.     cl.cli_ciudad,  
  5.     cl.cli_direccion,
  6.     tl1.telefono telefono1,
  7.     tl2.telefono telefono2,
  8.     cl.cli_email
  9. FROM tbl_clientes cl
  10.       INNER JOIN tbl_telefonos tl1 ON cl.cli_id=tl1.cli_id
  11.       LEFT JOIN tbl_telefonos tl2 ON cl.cli_id=tl2.cli_id
  12. WHERE  tl2.telefono IS NULL OR   tl1.telefono = tl2.telefono
  13.     ;
El problema es si se presenta algún caso donde haya más, por ejemplo cinco (5) teléfonos. Eso lo complica, dado que tendrás que cubrir todas las combinaciones de relaciones entre las tablas posibles, de modo que no se repitan los clientes, sino solamente devuelva teléfonos diferentes del mismo, o nulos.

La verdad es que salvo que haya una necesidad absoluta e imposible de cubrir pragmáticamente, para crear este tipo de consultas, no es recomendable bajo ninguna circunstancia.
En mi experiencia, en las aplicaciones empresariales, cuando se tiene que recuperar una cantidad variable de items relacionados a un cliente dado, NUNCA se hace en la misma query donde se obtienen los datos del cliente, sino en una query separada. Los resultados se integran el la aplicación, y no en la consulta.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 13/04/2016, 20:19
 
Fecha de Ingreso: diciembre-2013
Ubicación: Colombia
Mensajes: 8
Antigüedad: 10 años, 4 meses
Puntos: 0
Respuesta: Consulta en MySQL para mostrar los registros de 2 tablas de forma horizont

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Esa es la consulta base, pero no es la solución.
Para poder desplegar horizontalmente los teléfonos de cada cliente en una columna separada, tienes que agregar un INNER JOIN por cada teléfono adicional que haya, tomando como referencia la cantidad de telefonos que tenga el cliente con mayor cantidad de ellos.
¿Se entiende bien?
Esto quiere decir que si tienes dos teléfonos en un cliente, pones dos INNER JOIN:

Código SQL:
Ver original
  1. SELECT
  2.     cl.cli_id,  
  3.     cl.cli_nombre,  
  4.     cl.cli_ciudad,  
  5.     cl.cli_direccion,
  6.     tl1.telefono telefono1,
  7.     tl2.telefono telefono2,
  8.     cl.cli_email
  9. FROM tbl_clientes cl
  10.       INNER JOIN tbl_telefonos tl1 ON cl.cli_id=tl1.cli_id
  11.       LEFT JOIN tbl_telefonos tl2 ON cl.cli_id=tl2.cli_id
  12. WHERE  tl2.telefono IS NULL OR   tl1.telefono = tl2.telefono
  13.     ;
El problema es si se presenta algún caso donde haya más, por ejemplo cinco (5) teléfonos. Eso lo complica, dado que tendrás que cubrir todas las combinaciones de relaciones entre las tablas posibles, de modo que no se repitan los clientes, sino solamente devuelva teléfonos diferentes del mismo, o nulos.

La verdad es que salvo que haya una necesidad absoluta e imposible de cubrir pragmáticamente, para crear este tipo de consultas, no es recomendable bajo ninguna circunstancia.
En mi experiencia, en las aplicaciones empresariales, cuando se tiene que recuperar una cantidad variable de items relacionados a un cliente dado, NUNCA se hace en la misma query donde se obtienen los datos del cliente, sino en una query separada. Los resultados se integran el la aplicación, y no en la consulta.
Buenas noches y gracias por sus respuestas.
La verdad es que en la tabla teléfonos se debe almacenar X numero de números telefónicos para cada usuario, por lo que no hay una cantidad exacta de números telefónicos. Es decir, como un usuario puede tener 2, otro puede tener 5. He visto que para estos casos, algunas personas usan la clausula CASE dentro de la consulta para mostrar fechas por año y cosas así de forma horizontal, pero la verdad no se si sea posible aplicar esto en este caso o como aplicarlo.
Seria posible hacer algo similar usando CASE y, de ser posible, como podría hacerlo?
De antemano, muchas gracias por su ayuda.

Etiquetas: consulta+sql, consulta-mysql, consultas+mysql, consultasmysql, sql
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:04.