prueba si funciona así. yo he contado con que hay tres resultados principales en la consulta. Consultores, mes y precio
Código PHP:
Ver original<?php
$tabla = mysql_query("SELECT consultores.consultor AS consultor, trabajos.mes AS mes, COUNT(trabajos.actividades) AS numero_actividades, FROM trabajos INNER JOIN consultores ON trabajos.consultores_Ident_consultor = consultores.Ident_consultor WHERE ((consultores.esconsultor) = '1' AND ((consultores.f_fin IS NULL) OR (consultores.f_fin) = '0000-00-00')) GROUP BY consultor, mes ORDER BY consultores.consultor, trabajos.ano, trabajos.mes ASC"); while($row_tabla = mysql_fetch_array($tabla)){//montar un array con el consulto como key $array[$row_tabla['consultor']]=array(); }
if(!array_key_exists($row_tabla['mes'], $array)){ //dentro de cada array otro array con la mes como key $array[$row_tabla['consultor']][$row_tabla['mes']]=0;
}
$array[$row_tabla['consultor']][$row_tabla['mes']]+=$row_tabla['preciototal'];//suma tiempos si hay mas de preciototal por mes
}
?>
<table border="1">
<tr><th>CONSULTORES</th>
<?php
$cuenta_tareas=array();//array para guardar meses $salida=''; //salida
foreach($array as $k=>$v){//crear cabecera de meses
foreach($v as $clave=>$valor){
if(!in_array($clave,$cuenta_tareas)){//si no ha salido $cuenta_tareas[]=$clave;//la guardamos en el array y la mostramos
$salida.="<th>".$clave."</th>";
}
}
}
$salida.='</tr><tr>';//cerrar cabecera
$cuenta_filas=0;//contador de filas
foreach($array as $k=>$v){
$salida.= "<td>".$k."</td>";//muestra el consultor
for($i=0;$i<count($cuenta_tareas);$i++){//recorre el array de cabeceras if(array_key_exists($cuenta_tareas[$i],$v)){//si existe en la posicion actual mostramos el resultado $salida.="<td>".$v[$cuenta_tareas[$i]]."</td>";
}else{//si no existe ponemos celda vacía
$salida.="<td>-</td>";
}
}
if(count($array)>($cuenta_filas+1)){//cerrar filas si no es la última $salida.='</tr><tr>';
}
$cuenta_filas++;
}
echo $salida;
?>
</tr></table>