Ver Mensaje Individual
  #5 (permalink)  
Antiguo 19/09/2012, 06:38
jossss
 
Fecha de Ingreso: mayo-2006
Mensajes: 475
Antigüedad: 17 años, 11 meses
Puntos: 58
Respuesta: Tabla multidimensional: cómo afrontar el problema?

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
  1. <?php
  2. $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");
  3. $array=array();
  4. while($row_tabla = mysql_fetch_array($tabla)){//montar un array con el consulto como key
  5.     if(!array_key_exists($row_tabla['consultor'], $array)){
  6.         $array[$row_tabla['consultor']]=array();
  7.     }
  8.     if(!array_key_exists($row_tabla['mes'], $array)){ //dentro de cada array otro array con la mes como key
  9.         $array[$row_tabla['consultor']][$row_tabla['mes']]=0;
  10.     }
  11.     $array[$row_tabla['consultor']][$row_tabla['mes']]+=$row_tabla['preciototal'];//suma tiempos si hay mas de preciototal por mes
  12. }
  13. ?>
  14. <table border="1">
  15. <tr><th>CONSULTORES</th>
  16. <?php
  17. $cuenta_tareas=array();//array para guardar meses
  18. $salida=''; //salida
  19. foreach($array as $k=>$v){//crear cabecera de meses
  20.     foreach($v as $clave=>$valor){
  21.         if(!in_array($clave,$cuenta_tareas)){//si no ha salido
  22.             $cuenta_tareas[]=$clave;//la guardamos en el array y la mostramos
  23.             $salida.="<th>".$clave."</th>";
  24.         }
  25.     }
  26. }
  27. $salida.='</tr><tr>';//cerrar cabecera
  28. $cuenta_filas=0;//contador de filas
  29. foreach($array as $k=>$v){
  30.     $salida.= "<td>".$k."</td>";//muestra el consultor
  31.         for($i=0;$i<count($cuenta_tareas);$i++){//recorre el array de cabeceras
  32.             if(array_key_exists($cuenta_tareas[$i],$v)){//si existe en la posicion actual mostramos el resultado
  33.                     $salida.="<td>".$v[$cuenta_tareas[$i]]."</td>";
  34.                 }else{//si no existe ponemos celda vacía
  35.                     $salida.="<td>-</td>";
  36.                 }
  37.         }
  38.     if(count($array)>($cuenta_filas+1)){//cerrar filas si no es la última
  39.         $salida.='</tr><tr>';
  40.     }
  41.     $cuenta_filas++;
  42. }
  43. echo $salida;
  44. ?>
  45. </tr></table>