Ver Mensaje Individual
  #14 (permalink)  
Antiguo 21/01/2014, 21:39
Avatar de kahlito
kahlito
Colaborador
 
Fecha de Ingreso: marzo-2003
Ubicación: En el Estrecho y el mar
Mensajes: 2.936
Antigüedad: 21 años, 1 mes
Puntos: 65
Respuesta: Preparando una tabla mysql para hacer un horario semanal de clases en html

Cita:
Iniciado por guardarmicorreo Ver Mensaje
Nadie me lo ha pedido, pero me gustaría participar en este problema.

Empezando por el diseño de la BD:

-Cada hora, día, mes, año es una entidad propia, no puede haber un año sin un mes, este a su vez sin un día y este a su vez sin una hora.

Si queremos un sistema donde el usuario elija entre horas, días, meses y años establecidos anteriormente por él y si cada actividad se puede repetir en el mismo día, mes y año entonces
es necesario un diseño relacional donde cada entidad de tiempo está contenida en una tabla propia:

Una tabla para los años, otra para los meses, otra para los días y otra para las horas.

Además todas las entidades anteriores son hijas de la tabla padre 'activities' (la actividad que realiza el user como deporte, matemáticas, reunión, etc.) que a su vez es hija de la tabla users.

Luego para recoger los datos simplemente con inner join o inner según interese se pueden reemplazar los 1 por maría o 2 por literatura.

Después para presentar los datos solamente será necesario extraer todas las actividades inner join tablas de fechas y horas where el id_user = $_SESSION['id_user'].

Me parece que es una opción correcta. Pienso yo que hay que hacer todo lo que se pueda con el motor de la base de datos antes que hacerlo con PHP.
Hola guardarmicorreo, por supuesto que puedes participar en este tema, aquí todo el que quiera participar siempre es bienvenido.

En principio intenté algo así, hacerlo con tablas relacionadas pero verás que por ahora no me ha resultado. Creo que me sigue faltando algo, así que anoto tus consejos y retomo ese tema de 0 a ver si descubro otras opciones. De todas formas el usuario en principio sería solo el administrador de la web y por otro lado como indicaba en otro post haciendo la tabla en por filas y a la vez insertando directamente en la tabla horas el nombre de la clase y así ya me salía algo parecido:

horas
----------
id_hora
hora
clase_dia1
clase_dia2
id_horario

De todas formas como te digo voy a plantearlo de nuevo, ver las opciones posibles y a ver si soy capaz de sacarlo y aprender esta forma también.

Cita:
Iniciado por razierplus2 Ver Mensaje
Hola de nuevo, he estado liadillo y no he podido atender los mensajes antes:

A ver, unos diran que si, otros diran que no, pero a mi particularmente, me gusta que las consultas, a menos que sea obligatorio, sea unitabla. con lo cual:



debes hacer:
Código PHP:
Ver original
  1. $consulta_horas ="Select * from horas";

Pero claro, no tengo ni idea de como tienes distribuida tu BBDD, con lo cual no se si esa tabla es la correcta o no.

luego:

Código PHP:
Ver original
  1. $resultado_horas=mysql_query($consulta_horas);
  2.                 while($fila=mysql_fetch_array($resultado_horas))          
  3.                 {                  
  4.                     echo '<tr>';              
  5.                     echo '<td>'.$fila["hora"].'</td>';                            
  6.                     echo '<td>'.nombreClase($fila["clase_dia1"]).'</td>';
  7.                     //echo '<td>'.$fila["clase"].'</td>';                              
  8.                     echo '<td>'.nombreClase($fila["clase_dia2"]).'</td>';              
  9.                     echo '</tr>';                      
  10.                 }

Ves que llamo al metodo nombreclase, pasandole como parametro el id de la clase



Es asi:

Código PHP:
Ver original
  1. function nombreClase($clase){
  2.    global $conexion; //Esto solo si la variable de conexion esta fuera de este archivo
  3.  
  4.    $sql = "SELECT * FROM x_clases WHERE id='$clase';
  5.   $consulta = mysqli_query($conexion, $sql); //OJO estoy usando mysqli, no se si ya usas esa clase manejadora de BBDD
  6.  $datos = mysqli_fetch_assoc($consulta);
  7.   return $datos["nombre"];
  8. }
  9.  
  10. Ves el funcionamiento? Seguimos en ello ;)
  11.  
  12. Saludos.
Hola de nuevo razierplus.

Creo que más o menos he entendido los siguientes pasos, he modificado la opción msqli ya que aún no la manejo y a la vez he hecho dos ejemplos simples con echo para ver si imprime los resultados ya que a partir de ahí no se como unir los resultados.

Código PHP:
Ver original
  1. function nombreClase($clase){
  2.             //global $conexion; //Esto solo si la variable de conexion esta fuera de este archivo
  3.  
  4.             $sql = "SELECT * FROM x_clases WHERE id_clase='$clase'";
  5.             $consulta = mysql_query($sql);
  6.             $datos = mysql_fetch_array($consulta);
  7.             return $datos["clase"];
  8.             }
  9.             echo "Probando el resultado a imprimir, que aquí sería: " .nombreClase(4). "<br />";           
  10.             $nombre_xclase= nombreClase(3);//Otro ejemplo solo de prueba
  11.             echo $nombre_xclase;

¿Cual sería el siguiente paso? He probado dos opciones poniendo antes la función y luego volviendo a imprimir las horas desde la tabla horas pero sigo sin saber unirlos. ¿Es correcta esa opción o tengo que crear otra nueva consulta?

Gracias a los dos por la ayuda, saludos.