Ver Mensaje Individual
  #4 (permalink)  
Antiguo 13/04/2016, 20:19
estebancapoeira
 
Fecha de Ingreso: diciembre-2013
Ubicación: Colombia
Mensajes: 8
Antigüedad: 11 años
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.