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 originalSELECT id, visitas, titulo, descripcion, vista_previa, tipo, fecha
FROM principal;
Ahora bien, supongamos se requiera mostrar todos los videos relacionados con la misma galería:
Código SQL:
Ver originalSELECT
P.id,
P.visitas,
P.titulo,
P.descripcion,
P.vista_previa,
P.tipo,
P.fecha,
V.codigo_video
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 originalSELECT
P.id,
P.visitas,
P.titulo,
P.descripcion,
P.vista_previa,
P.tipo,
P.fecha,
V.codigo_video,
F.nombre_foto
FROM principal P
LEFT JOIN videos V ON P.id = V.id_principal
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 originalSELECT
P.id Galeria,
IFNULL(GROUP_CONCAT(V.codigo_video), '') Videos,
IFNULL(GROUP_CONCAT(F.nombre_foto), '') Fotos
FROM principal P
LEFT JOIN videos V ON P.id = V.id_principal
LEFT JOIN fotos F ON P.id = F.id_principal
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.