Al construir la tabla cada celda debe tener de id el id del profesional y la fecha, por otro lado la información de las tareas tambien tiene esos datos... luego el bucle de construcción de la tabla debe llenar la celda si conciden los datos o llenarla con un blanco.... Para optimizar debes coseguir que la información llege de la bbdd en el mismo orden en que se construiran las celdas de la tabla...
Supongamos que tines dos profesionales A y B y que tienes 3 fechas 1,2,3
----1--2--3
A A1 A2 A3
B B1 B2 B3
Sequencialmente el cuerpo de la tabla será:
<tr>
<td id="A">A</td>
<td id="A1">A1</td>
<td id="A2">A2</td>
<td id="A3">A3</td>
<tr>
Los datos de la bbdd
profesinal, fecha, tarea
A,1,Trabaja
A,3,Trabaja
B,2,Trabaja
Bucle construye cabcera con la fechas
Bucle recorre tareas
--Condicional si conciden datos de la celda y de la tarea se imprime
si no se imprime
Todos los profesionales deben tener
todas las celdas con contenido o espacio blanco ( )
Código PHP:
Ver original$tablaBody="<tbody>";
$arrayFachas <--- array con la fechas
$arrayTareas <--- datos de la bbdd order by profesional, fecha
$profesional="";
$ultFecha=0;
for($tarea=0;$tarea<count($arrayTareas);$tareas++){ if($profesional!=$arrayTareas[$tarea]["profesional"]){
if($tarea!=0){
$tablaBody.="</tr><tr>";
}else{
$tablaBody.="<tr>";
}
$tablaBody.="<td>".$arrayTareas[$tarea]["profesional"]."</td>";
$profesional=$arrayTareas[$tarea]["profesional"];
$ultFecha=0;
}
for($fecha=$ultFecha;$fecha<count($arrayFachas);$fecha++){ if($profesional==$arrayTareas[$tarea]["profesional"]){
if($arrayTareas[$tarea]["fecha"]==$arrayFachas[$fecha]["fecha"]){
$tablaBody.="<td>".$arrayTareas[$tarea]["tarea"]."</td>";
}else{
$tablaBody.="<td> </td>";
}
}else{
$tablaBody.="<td> </td>";
}
$ultFecha++;
}
}
$tablaBody.="</tr></tbody>";
hecho al vuelo puede tener algun error pero la idea es esa.