Cita:
Iniciado por dashtrash Consulta equivalente a la tuya, que aprovecha más la potencia y capacidades:
No hace falta ni agrupación de filas , ni de columnas.
Al fin y al cabo, si le vas a pasar al código la responsabilidad de saber qué son videos, y qué son fotos, al menos, que tenga todos los campos.
Si te fijas con mas cuidado, yo ya había planteado esa sentencia como una posibilidad, pero puse la advertencia de que esa sintaxis producirá un producto cartesiano.
Supongo que sabes a qué me refiero con "producto cartesiano".
En cualquier caso no es una "posibilidad", de ocurrencia, sino una
certeza, porque la experiencia me lo ha demostrado: genera ese problema.
La explicación de por qué ya se la he dado a varios foristas en otra ocasión cuando preguntaban por qué se les producia ese tipo de respuestas.
Cita:
Iniciado por dashtrash Cambiar los NULL por '', o por agrupaciones de algo que no viene duplicado...No sé cómo aprovecha la potencia.
Los NULL son potentes en las bases de datos, aunque difíciles de entender para los programadores. Y de todos modos no es el tema base: La idea de la función IFNULL() que prevnir algo que sin datos de la base original no puedo comprobar, además de ser una escritura habitual en los DBA en los LEFT JOIN para evitar que el programador tenga problemas con los resultado.
Inevitable para mi, porque trabajo profesionalmente como DBA. Tengo ciertos hábitos de codificación adquiridos.
La función GROUP_CONCAT() tiene por objetivo evitar las
repeticiones de la primera columna, y recolectar todos los IDs de las otras dos relacionados al mismo ID, especialmente en el caso de que no haya una relación 1:1 entre fotos y videos (que es lo que el forista dice, precisamente).
Cita:
Iniciado por dashtrash Por favor, ejecuta esto en tu Mysql, a ver si te da algún error:
Son 2 tablas con una columna con el mismo nombre.
Si te fijas, la descripcion de las tablas es:
Cita: PRINCIPAL: id, visitas, titulo, descripcion, vista_previa, tipo, fecha
VIDEOS: id, id_principal, codigo_video
FOTOS: id, id_principal, nombre_foto
COmo se puede apreciar, cada tabla tiene su propio campo "ID", por lo que un "SELECT *" hecho sobre dos tablas devolverá ambas columnas con ese mismo nombre.
Esto no genera problema al momento de una consulta simple como:
Pero cuando transformas esa consulta en una tabla derivada con la sintaxis:
Tendrás en algun momento problemas con esos dos campos si usases esos campos como condición.
TE concedo que me distraje un momento con los nombres, y que si haces
exactamente con las tablas descritas una consulta a
dos tablas, no se producirá problema de ambigüedad de columnas. Pero los tendrás luego al leer el resultado en PHP, y también si haces la consulta a tres tablas, donde si se generaría... Aunque evitarlo es sencillo: Basta con poner alias a la columna de la subconsulta.
Finalmente, creo que deberíamos esperar la respuesta del forista, porque esto se está convirtiendo en un debate entre dos, y ninguno tiene toda la información necesaria para solucionar el problema completamente.