Ver Mensaje Individual
  #8 (permalink)  
Antiguo 18/08/2015, 06:00
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, 3 meses
Puntos: 2658
Respuesta: Consulta dentro de consulta en PHP (y mySQL)

Mira, la verdad es que me asombra un poco que estés teniendo problemas con algo como esto, porque en realidad la solución sale con sólo razonarlo un poco.
En primer lugar vamos a hacer una aclaración inicial para que no queden dudas respecto a lo que puede dar o no puede dar el SQL:
En una consulta SELECT con uso de JOIN, donde tienes una relación 1:N entre dos tablas, la consulta devolverá SIEMPRE una vez cada registro de la tabla de cardinalidad 1 por cada relación que posea en la tabla de cardinalidad N. Ese es el comportamiento normal y esperado de un JOIN. Emn ese sentido, la base no está haciendo nada mal.

Ahora bien, razonemos:
Si la tabla devuelta tiene N veces un set de columnas, por cada valor de agregación en el que se agrupan esos valores, y se quiere mostrar el contenido de esos campos sólo en la primera línea, pero no en las siguientes que correspondan al mismo set de valores, ¿cómo se hace?
La respuesta es simple: Necesitas determinar en qué momento deja de aparecer un set, para que empiece el otro, y sólo mostrarlo cuando se produce el cambio.
Si lo meditas menos de cinco minutos, la respuesta se vuelve evidente:

Pasos:
Cita:
1) Leer la primera linea de la tabla resultado.
2) Almacenar cada valor de cada columna devuelta en una variable.
3) Mostrar el conjunto completo, cada dato en su celda de la vista.
4) Recorrer lo siguientes registros y:
4.1.) Si los datos de las columnas comunes al set de agrupamiento del registro que se lee son iguales a los datos ya almacenados en las variables que les corresponden:
4.1.1) Imprimir celdas vacías en los datos de las columnas de agrupamiento,
4.1.2.) Imprimir los datos de las columnas con agregación.
4.2.) Si los datos del set es diferente:
4.2.1) Poner en cada variable correspondiente, el contenido de su columna tomado del registro que se lee.
4.2.2.) Imprimir los datos de las columnas del set común en sus celas,
4.2.3.) Imprimir los datos de las columnas con agregación.
5.) Fin del ciclo al terminar el ultimo registro.
Pregunta: ¿Necesitas el código, o te animas a escribirlo en base a este algoritmo?
ten en cuenta que es un algoritmo básico, de los que se enseñan en las primeras clases sobre métodos de loop en arrays.

NOTA BENE:
Én un mensaje anterior te dije:
Cita:
(hace un tiempo postee en PHP un ejemplo de lo que digo).
Con sólo eso podrías haber encotnrado el post, cosa que a mi me llevó veinte (2) segundos usando el buscador del foro...

http://www.forosdelweb.com/f18/datos...7/#post4710993
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 18/08/2015 a las 06:13