Ver Mensaje Individual
  #2 (permalink)  
Antiguo 21/11/2012, 02:45
quimfv
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: como puedo generar una tabla cruzada???

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
  1. $idInicial=0;
  2.     while($row = mysql_fetch_array($con)) {
  3.     $dia=$row[Fecha];
  4.     if($idInicial!=$row[id]){
  5.           if($idInicial!=0) echo "</tr>"; //Cierra la linea anterior
  6.           echo "<tr>";
  7.           echo "<td>$row[id]</td>";
  8.           echo "<td>$row[Personal]</td>";
  9.           $idInicial=$row[id];
  10.     }//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
  1. $idInicial=0;
  2.     while($row = mysql_fetch_array($con)) {
  3.     $dia=$row[Fecha];
  4.     if($idInicial!=$row[id]){
  5.           if($idInicial!=0) echo "</tr>"; //Cierra la linea anterior
  6.           echo "<tr>";
  7.           echo "<td>$row[id]</td>";
  8.           echo "<td>$row[Personal]</td>";
  9.           $idInicial=$row[id];
  10.           $col=-1; //Si no ha cambiado el nombre $col sigue con el ultimo valor.?????
  11.           $j=0; //para controlar el for de las fechas Si no ha cambiado el nombre $j sigue con el ultimo valor.
  12.     }//Abre la linea y pone el nombre del nuevo mobre
  13. for($i = $j; $i < count($farray); $i++){
  14.             $col++;
  15.             $j++;
  16.                 if($farray[$i] == $dia){
  17.                     for($f=0; $f<=$col; $f++){
  18.                         if($f==$col){
  19.                         echo "<td style=background-color:#F5D0A9;>$row[Valor_dia]</td>"; // aca se coloca el valor.
  20.                         }
  21.                    
  22.                     }
  23.                    
  24.                 }else{    
  25.                     echo "<td>0</td>";
  26.                 }
  27.             }
  28.      }
  29.                                    
  30. echo "</tr>";
  31. 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.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 21/11/2012 a las 03:05