No se puede solucionar con Mysql pero puedes solucionarlo con php.
gnzsoloyo disculpa por saltarme las reglas del subforo, pensaba que estaba en php, podes trasladarlo.
(O dar una solución Mysql)
Igual que usas un condicional para elegir la columna donde pones los datos debes usar un condicional para pasar de linea o no si ha cambiado el nombre....
Algo asi
Código PHP:
Ver original$idInicial=0;
$dia=$row[Fecha];
if($idInicial!=$row[id]){
if($idInicial!=0) echo "</tr>"; //Cierra la linea anterior
echo "<tr>";
echo "<td>$row[id]</td>";
echo "<td>$row[Personal]</td>";
$idInicial=$row[id];
}//Abre la linea y pone el nombre del nuevo mobre
Si haces esto tendrás una sola linea por nombre, con lo que deberia cambiar la logica de colocar celdas con 0 cero en las fechas distintas a $dia.
Debes calcular el numero de columnas que deben rellenarse con cero entre fecha y fecha de un nombre.
quizas con solo reiniciar $col a -1 cuando ha cambiado el nombre lo tienes solucionado...
Código PHP:
Ver original$idInicial=0;
$dia=$row[Fecha];
if($idInicial!=$row[id]){
if($idInicial!=0) echo "</tr>"; //Cierra la linea anterior
echo "<tr>";
echo "<td>$row[id]</td>";
echo "<td>$row[Personal]</td>";
$idInicial=$row[id];
$col=-1; //Si no ha cambiado el nombre $col sigue con el ultimo valor.?????
$j=0; //para controlar el for de las fechas Si no ha cambiado el nombre $j sigue con el ultimo valor.
}//Abre la linea y pone el nombre del nuevo mobre
for($i = $j; $i < count($farray); $i++){ $col++;
$j++;
if($farray[$i] == $dia){
for($f=0; $f<=$col; $f++){
if($f==$col){
echo "<td style=background-color:#F5D0A9;>$row[Valor_dia]</td>"; // aca se coloca el valor.
}
}
}else{
echo "<td>0</td>";
}
}
}
echo "</tr>";
echo "<table>";
Siempre que los datos lleguen ordenados por nombre y fecha funcionará, creo.
Dime si te ha funcionado, lo he hecho al vuelo sin probar nada.