Foros del Web » Programando para Internet » PHP »

tabla con columnas y filas variable

Estas en el tema de tabla con columnas y filas variable en el foro de PHP en Foros del Web. Hola foreros la idea es la siguiente... para explicarlo de la forma mas simple posible, lo que quiero es generar una libreta de notas con ...
  #1 (permalink)  
Antiguo 29/10/2007, 23:58
 
Fecha de Ingreso: febrero-2007
Mensajes: 70
Antigüedad: 17 años, 2 meses
Puntos: 1
tabla con columnas y filas variable

Hola foreros

la idea es la siguiente... para explicarlo de la forma mas simple posible, lo que quiero es generar una libreta de notas con php y mysql... el problema es que por ejemplo, un alumno tiene 10 asignaturas, cada una de esas aignaturas tiene un numero x de notas, entoces se me presenta el problema por que por ejemplo Juanito tiene 2 notas en matemáticas, 4 en historia y 6 en inglés, por decir algo... la tabla sería así:

asignaturas/notas ll n1 ll.. n2 ll.. n3 ll.. n4 ll.. n5 ll.. n6.......... nn ll Promedio
matematicas ll 5,0 ll.. 6,0 ll................................................ ............ll5,5
historia ll 7,0 ll.. 7,0 ll.. 7,0 ll.. 7,0 ll......................................ll 7,0
inglés ll 3,2 ll.. 5,5 ll.. 4,5 ll.. 6,7 ll..6,6 ll..7,0 ll................ll 5,6

ademas el número de asignaturas igual es variable.. ya que un alumno puede estar tomando 8 asignaturas y otro puede estar tomando 10.. tengo la tabla de la base de datos notas hecha y tiene esta estructura..

id_nota (clave primaria)
id_asignatura (clave foranea)
id_alumno (clave foranea)
nombre nota (valores como: n1, n2, n3, n4)
valor nota (la nota en si)

tengo problemas para ver esto, no se me ocurre una forma de solucionarlo de manera de crear la tabla dinamicamente y esta se adapte a los datos del usuario,
se me ocurre contar las notas que tiene al alumno en cada asignatura y guardar la mayor para dejar ese como numero de columnas, luego contar las asignaturas donde se encuentre el id del alumno, para sacar asi el numero de filas, pero desde ahí me enrredo... alguna sugerencia, cualquier cosa será bienvenida..

de antemano gracias y saludos
  #2 (permalink)  
Antiguo 30/10/2007, 10:35
 
Fecha de Ingreso: febrero-2007
Mensajes: 70
Antigüedad: 17 años, 2 meses
Puntos: 1
Re: tabla con columnas y filas variable

nadie me puede dar una mano con esto??
  #3 (permalink)  
Antiguo 30/10/2007, 14:43
 
Fecha de Ingreso: febrero-2007
Mensajes: 70
Antigüedad: 17 años, 2 meses
Puntos: 1
Re: tabla con columnas y filas variable

lo subo de nuevo, haber si alguien ayuda
  #4 (permalink)  
Antiguo 03/11/2007, 02:18
 
Fecha de Ingreso: febrero-2007
Mensajes: 70
Antigüedad: 17 años, 2 meses
Puntos: 1
Re: tabla con columnas y filas variable

Lo solucioné, y por si a alguien le sirve, posteo el codigo..

Código PHP:
<?php
include("conexion.php");
$usuario $_SESSION["s_login"]; //contiene el id de usuario
$curso $_SESSION["s_curso"]; //contiene el curso al que pertenece el usuario

$consulta mysql_query("select id_asignatura,nombre_asign from asignaturas where nombre_curso = '$curso'");

?>
<table summary="Documentos">
            <caption>Notas</caption>
<thead>
<tr>
    <th scope="col">Asignaturas:</th>
    <th scope="col">N1</th> //puse un máximo de 9 notas
    <th scope="col">N2</th>
    <th scope="col">N3</th>
    <th scope="col">N4</th>
    <th scope="col">N5</th>
    <th scope="col">N6</th>
    <th scope="col">N7</th>
    <th scope="col">N8</th>
    <th scope="col">N9</th>
    <th scope="col">Promedio</th> //para el promedio de cada asignatura
</tr>
</thead>
<tbody>
<?php
while ($row mysql_fetch_array($consulta)){
$i 0;
$total 0;
echo 
"<tr>";
echo 
"<th scope=\"row\">".$row['nombre_asign']."</th>";
    
$asignatura $row['id_asignatura'];
    
$consulta2mysql_query("select valor_nota from obtiene_notas where id_asignatura = '$asignatura'");
    while (
$row2 mysql_fetch_array($consulta2)){
    echo 
"<td>".$row2['valor_nota']."</td>";
    
$i $i+1;   //cuenta el numero de notas de cada asignatura
    
$total $total+$row2['valor_nota'];   //suma las notas
    
}
    
$j $i+1;
    while (
$j<10){  //esto es para rellenar las columnas que queden vacias y pintar el promedio donde corresponde
    
$j++;
    echo 
"<td></td>";
                }
    if (
$i>0){  //para evitar la division por 0
    
$promedio $total/$i;   //se saca promedio
    
echo "<td>".number_format($promedio,1,',','.')."</td>";   //promedio con 1 decimal
                
}
echo 
"</tr>";
}
?>
<tfoot>
<tr>
<th scope="row"></th>
<td colspan="4">td>
</tr>
</tfoot>
</tbody>
</table>
Acá una foto de como lista los datos:


Cálculo 1 no tiene calificaciones aún, y como pueden ver cada asignatura tiene un número distinto de calificaciones

Ahora les queria preguntar si habia una solución mas elegante que utilizando 2 querys, con un join alomejor, pero la verdad de join no conosco mucho... me gustaria que me dieran su opinion sobre lo correcto y optimo del codigo.... saludos y gracias

Última edición por mreyesb; 03/11/2007 a las 02:27
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:22.