Ver Mensaje Individual
  #3 (permalink)  
Antiguo 13/04/2016, 06:02
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
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)