Ver Mensaje Individual
  #1 (permalink)  
Antiguo 21/11/2012, 01:07
Chevy1975
 
Fecha de Ingreso: octubre-2012
Ubicación: El Salvador
Mensajes: 14
Antigüedad: 11 años, 6 meses
Puntos: 0
como puedo generar una tabla cruzada???

Saludos a todos.!

Me encuetro en un problema al generar un reporte con 2 tablas:
personal_catorcenald: sus campos son: id, Personal.
la otra tabla es mov_diario y sus campos son: id_diario, Fecha, Finca, No_Planilla, Nombres, Valor_dia
y la relacion es que una persona puede tener muchos movimientos.
para el caso: en la aplicacion el usuario define el rango de fecha, finca y planilla, para poder generar el reporte.
Detalle del Reporte:
Necesito poner como encabezado horizontalmente las fechas en que hayan trabajado y colocar cada dia segun la fecha lo que gano ese dia (Valor_dia);

| id |Personal | fecha1 | fecha n| fecha n|........... | total |
| 1 | Fulano | 4.20 | 10.89 | 24.25 |...................|(sumatoria de fulano)|

El problema es que como podría ser solo unos cuantos dias como pueda que sea todo el mes.


el query que tengo para las fechas es el siguiente:
SELECT DISTINCT(Fecha) from mov_diario WHERE Fecha >= "2012-11-01" and Fecha <= "2012-11-14" and Finca = " 1" and No_Planilla = "12MD21"

el query para llenar la tabla es el siguiente.:
SELECT personal_catorcenald.Personal, personal_catorcenald.id, Fecha, Finca, Valor_dia
FROM mov_diario, personal_catorcenald
where Fecha >= "2012-11-01" and Fecha <= "2012-11-15" and Finca = " 1" and mov_diario.Nombres = personal_catorcenald.id
GROUP BY id, Fecha
ORDER BY id


y el problema es que se me repite el nombre.. por cada dia trabajado.


****lo he trabajado de esta forma ya que es la forma en como lo lleno en PHP.
ajunto codigo:
Código PHP:
<?php  

include "conexionBD.php";  
//digamos que estos son las fechas introducidas por el usuario.
$fecha1 "2012-11-01";
$fecha2 "2012-11-20"
$finca " 1";
$planilla "12MD21";
//aca tomo la fecha para ponerla de encabezado
$conf=mysql_query("SELECT DISTINCT(Fecha) as Fecha from mov_diario WHERE Fecha >= '$fecha1' and Fecha <= '$fecha2' and Finca = '$finca' order by Fecha asc"$conexion);

echo 
"<table width=\"100%\" border=\"1\" align=\"center\">";
echo 
"<tr>";
echo 
"<td>ID</td>";
echo 
"<td>Nombres</td>";

 while(
$rowf mysql_fetch_array($conf)) {  
      
$farray[] = $rowf[Fecha];
      echo 
"<td>$rowf[Fecha]</td>";
    }
echo 
"<td> Dia</td>";
echo 
"</tr>";

$con=mysql_query("SELECT personal_catorcenald.Personal, personal_catorcenald.id,  Fecha, Finca, Valor_dia FROM mov_diario, personal_catorcenald where Fecha >= '$fecha1' and Fecha <= '$fecha2' and Finca = '$finca' and mov_diario.Nombres = personal_catorcenald.id  GROUP BY id, Fecha ORDER BY id"$conexion);
    while(
$row mysql_fetch_array($con)) {
    
$dia=$row[Fecha];
    echo 
"<tr>";
    echo 
"<td>$row[id]</td>";
    echo 
"<td>$row[Personal]</td>";
    

        
$col = -1;
            for(
$i 0$i count($farray); $i++){
            
$col++;
                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>";    
        
?>
de esta forma es lo mas cerca que he llegado... Por favor su ayuda...
como puedo simplificarlo...
????????