Ver Mensaje Individual
  #1 (permalink)  
Antiguo 24/10/2012, 04:12
portela85
 
Fecha de Ingreso: abril-2011
Mensajes: 103
Antigüedad: 13 años, 7 meses
Puntos: 3
Generar tabla compleja

Buenos días/tardes,

estoy intentando construir una tabla donde tanto el nombre de las columnas, de las filas, y los datos de las celdas, se extraen desde una base de datos. Tenía hecho algo parecido, con la ayuda de uno de vosotros, pero no consigo adaptarlo a mi propósito. Quiero una tabla que me quede aproximadamente así:

Código HTML:
<table>
<tr>
<td>CONSULTOR</td>
<td>1</td>
<td>2</td>
<td>3</td>
<td>4</td>
<td>5</td>
<td>6</td>
<td>7</td>
<td>8</td>
<td>9</td>
<td>10</td>
<td>11</td>
<td>12</td>
<td>13</td>

</tr>
<tr>
<td>Juan Fernandez</td>
<td>no</td>
<td>si</td>
<td>si</td>
<td>si</td>
<td>si</td>
<td>si</td>
<td>si</td>
<td>no</td>
<td>no</td>
<td>si</td>
<td>si</td>
<td>si</td>
<td>si</td>
</tr>

<tr>
<td>Pepito Corneta </td>
<td>si</td>
<td>no</td>
<td>no</td>
<td>si</td>
<td>si</td>
<td>si</td>
<td>si</td>
<td>no</td>
<td>no</td>
<td>si</td>
<td>si</td>
<td>si</td>
<td>si</td>
</tr>
</table> 
y este es el código para que se genere la tabla

Código PHP:
    <?php
    
$usuario 
= new usuario();
$cons $usuario->ObtenerConsultores();
        
    foreach(
$cons as $consultores) {
$consultor_no_report $consultores['Ident_consultor'];

$query2="Select calendario_dias.dia AS dia, consultores.consultor AS consultor from calendario_dias, consultores WHERE calendario_dias.mes = '$mes' AND dia NOT IN (SELECT DISTINCT trabajos.dia FROM trabajos INNER JOIN consultores ON trabajos.consultores_Ident_consultor = consultores.Ident_consultor WHERE mes = '$mes' AND ano = '$anos' AND (consultores.Ident_consultor) = '$consultor_no_report')AND (consultores.Ident_consultor) = '$consultor_no_report' AND (consultores.esconsultor) = '1' AND (consultores.reporte_habitual) = '1' AND ((consultores.f_fin)='' OR (consultores.f_fin) = '0000-00-00');";

/*    $query="SELECT consultores.consultor AS consultor, mes.mes AS mes, round(SUM(trabajos.preciototalK25),2) AS preciototal FROM trabajos INNER JOIN consultores ON trabajos.consultores_Ident_consultor  = consultores.Ident_consultor INNER JOIN mes ON trabajos.mes = mes.id_mes 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;";
*/    
    
$consulta = new Consulta($query2);
   
    
$array=array();
    while(
$row_tabla $consulta->obtener_fila()) {//montar un array con el consultor como key
        
if(!array_key_exists($row_tabla['consultor'], $array)){
            
$array[$row_tabla['consultor']]=array();
        }
        if(!
array_key_exists($row_tabla['dia'], $array)){ //dentro de cada array otro array con la mes como key
            
$array[$row_tabla['consultor']][$row_tabla['dia']]=0;
        }
        
$array[$row_tabla['consultor']][$row_tabla['dia']]+=$row_tabla['preciototal'];//suma tiempos si hay mas de preciototal por mes
    
}
    
var_dump($array);
    
?>
    
    <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;
    
?>
En estos momentos lo único que me saca es el nombre de la cabecera <th>CONSULTOR</th> tantas veces como se ejecuta la consulta

Muchas gracias y un saludo