Ver Mensaje Individual
  #6 (permalink)  
Antiguo 19/01/2013, 04:20
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, 2 meses
Puntos: 2658
Respuesta: Mostrar resultados mysql en 2 columnas distintas

Cita:
A ver si he entendido bien, el problema es que solo quieres hacer una consulta a mysql, pero sin embargo tienes 3 tablas. Es imposible sacar resultados de 3 tablas con una sola consulta.


@manuparquegiralda:
En eso estás completamente equivocado. Por eso existen las bases de datos. Me sorprende que digas algo así...
COnsultas únicas que invoquen 2, 3, 4 ó 36 tablas son muy habituales en el SQL.

En realidad como consulta lo que necesita no es complejo, lo complejo está dado por el esquema de base que tiene que no parece correcto para lograr ese tipo de resultados. Pero eso es tema de otro foro (este post también, pero no puedo cambiarlo de lugar).
Yo lo veo de esta forma: Si Principal con tiene los datos de la galería, entonces es la primera tabla
Código SQL:
Ver original
  1. SELECT id, visitas, titulo, descripcion, vista_previa, tipo, fecha
  2. FROM principal;
Ahora bien, supongamos se requiera mostrar todos los videos relacionados con la misma galería:
Código SQL:
Ver original
  1. SELECT
  2.     P.id,  
  3.     P.visitas,  
  4.     P.titulo,  
  5.     P.descripcion,  
  6.     P.vista_previa,  
  7.     P.tipo,  
  8.     P.fecha,  
  9.     V.codigo_video
  10. FROM principal P INNER JOIN videos V ON P.id = V.id_principal;
El problema es cómo reunir esto con las fotos.
Hay dos formas de lograrlo. Una es usando LEFT JOIN porque a priori no sabemos si hay más galerías con fotos que galerías con videos (si sólo hubiese una foto y un único video, la separacion en tres tablas carece de sentido).
Esto nos llevaría a esta consulta:
Código SQL:
Ver original
  1. SELECT
  2.     P.id,
  3.     P.visitas,
  4.     P.titulo,
  5.     P.descripcion,
  6.     P.vista_previa,
  7.     P.tipo,
  8.     P.fecha,
  9.     V.codigo_video,
  10.     F.nombre_foto
  11. FROM principal P
  12.     LEFT JOIN videos V ON P.id = V.id_principal
  13.     LEFT JOIN fotos F ON P.id = F.id_principal;
Pero eso podría generar un producto cartesiano con muchísimas repeticiones.
La solución que veo más práctica es por doble vía: Una consulta que devuelva sólo el ID principal con dos columnas conteniendo la lista de videos y la lista de fotos relacionadas. Algo como:
Código SQL:
Ver original
  1. SELECT
  2.     P.id Galeria,
  3.     IFNULL(GROUP_CONCAT(V.codigo_video), '') Videos,
  4.     IFNULL(GROUP_CONCAT(F.nombre_foto), '') Fotos
  5. FROM principal P
  6.     LEFT JOIN videos V ON P.id = V.id_principal
  7.     LEFT JOIN fotos F ON P.id = F.id_principal
  8. GROUP BY P.id
Luego, en la programación armas la segunda y tercera columna en función a la cantidad de items que te regrese 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)