Foros del Web » Programando para Internet » PHP »

Preparando una tabla mysql para hacer un horario semanal de clases en html

Estas en el tema de Preparando una tabla mysql para hacer un horario semanal de clases en html en el foro de PHP en Foros del Web. Hola. Estoy actualizando una web en html con php y mysql donde intento dejar que el usuario por si mismo cree su propio horario de ...
  #1 (permalink)  
Antiguo 13/01/2014, 10:14
Avatar de 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
Preparando una tabla mysql para hacer un horario semanal de clases en html

Hola.

Estoy actualizando una web en html con php y mysql donde intento dejar que el usuario por si mismo cree su propio horario de clases semanal.

El horario sería por ejemplo algo así:

Hora - Lunes - Martes
----------------------------
19:00 - Bachata -
20:00 - Salsa - Bailes Latinos
21:00 - Iniciación - Bachata

He hecho varios intentos y la verdad no me aclaro y creo que tampoco logro el resultado final. Por ejemplo he probado haciendo varias tablas:

Horario
---------
id_horario - 1
horario - Invierno 2014
columna1 - Hora
columna2 - Lunes
columna3 - Martes

Entonces de ahí imprimo horario, columna1, 2 y 3 y ya tengo el encabezado de la tabla, sería algo así:

Código PHP:
Ver original
  1. $consulta_horarios = "select * from horarios where id_horario=1";
  2.             $resultado_horarios=mysql_query($consulta_horarios);
  3.             while($fila=mysql_fetch_array($resultado_horarios))
  4.             {
  5.                 echo '<h3>'.$fila["horario"].'</h3>';
  6.                 echo '<table summary="Horarios">
  7.                         <thead>
  8.                         <tr>
  9.                         <td height="60"><strong>'.$fila["columna1"].'</strong></td>
  10.                         <th height="60" id="l" scope="col">'.$fila["columna2"].'</th>
  11.                         <th height="60" id="mj" scope="col">'.$fila["columna3"].'</th>
  12.                       </tr>    
  13.                     </thead>';

Hasta aquí me iría perfectamente. Ahora quiero introducir las diferentes clases y horas y para ello he creado por ejemplo dos tablas:

Clases
--------
id_clase - 1
clase - Bachata

Horas
--------
id_hora - 1
hora - 19:00
clase_dia1 - Lunes
clase_dia2 - Martes
id_horario - 1

Y a la hora de imprimir hago esto:

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

Y al final siempre me sale esto:

Hora --- Lunes - Martes
19:00 --- 1 ------ 0
20:00 --- 2 ------ 3

He probado ya otras muchas opciones y no lo consigo, primero no recuerdo como cambiar el 1 por el nombre de la clase (bachata, salsa etc etc) y a la vez hacer que se carguen todas las horas ya que en este caso tengo como ejemplo 3 horas insertadas y no se imprime la tercera.

¿Qué puedo arreglar? ¿Hay otra manera de hacerlo mejor?¿Podría hacerlo con menos tablas o al contrario tengo que incluir alguna que otra tabla más?

Saludos.

PD: No sabía sí sería mejor hacer esta consulta en el foro de php o en el foro mysql.
  #2 (permalink)  
Antiguo 13/01/2014, 16:28
 
Fecha de Ingreso: mayo-2009
Mensajes: 382
Antigüedad: 14 años, 10 meses
Puntos: 6
Respuesta: Preparando una tabla mysql para hacer un horario semanal de clases en html

Cita:
Iniciado por kahlito Ver Mensaje
Hola.
¿Qué puedo arreglar? ¿Hay otra manera de hacerlo mejor?¿Podría hacerlo con menos tablas o al contrario tengo que incluir alguna que otra tabla más?
Me cuesta un poco coger "la ruta"
A ver, las clases son fijas, es decir a elegir, o puede ser individual?
Si son fijas, hay muchas clases diferentes?
  #3 (permalink)  
Antiguo 13/01/2014, 16:48
 
Fecha de Ingreso: mayo-2009
Mensajes: 382
Antigüedad: 14 años, 10 meses
Puntos: 6
Respuesta: Preparando una tabla mysql para hacer un horario semanal de clases en html

pensandolo bien tiene un parecido a mi web que es reservas.
quizas algo asi:
Código HTML:
Ver original
  1. id          nombre    hora       dia_semana     clase
  2. 1           pepe       12:00      Lunes              Samba
Asi sería una fila por cada clase.
No estoy muy segura
  #4 (permalink)  
Antiguo 13/01/2014, 17:01
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Preparando una tabla mysql para hacer un horario semanal de clases en html

<saludos>
Sobre lo que se comenta tengo lo siguiente

1. Cambiar el id por el nombre
Respecto a esto, pregunto, según lo que comentas de las tablas,
entonces debes imprimir es el campo clase en donde quieres ver
la descripción de la misma

2. En cuanto a que no salga la totalidad de los registros, no será
tal vez por el where de la consulta?
Si ejecutas el query en el motor con el filtro que estás haciendo,
cuantos registros obtienes?

Revisa eso y nos cuentas
</saludos>
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #5 (permalink)  
Antiguo 14/01/2014, 05:53
Avatar de 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 helenp Ver Mensaje
Me cuesta un poco coger "la ruta"
A ver, las clases son fijas, es decir a elegir, o puede ser individual?
Si son fijas, hay muchas clases diferentes?
Cita:
Iniciado por helenp Ver Mensaje
pensandolo bien tiene un parecido a mi web que es reservas.
quizas algo asi:
Código HTML:
Ver original
  1. id          nombre    hora       dia_semana     clase
  2. 1           pepe       12:00      Lunes              Samba
Asi sería una fila por cada clase.
No estoy muy segura
Hola helenp, son clases que pueden variar en cualquier momento al igual que las horas y días de semana. La idea de hacerlo por filas lo intenté solo que no sabía como posicionar cada clase en un día distinto, creo que algo así podría servirme:

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

Cita:
Iniciado por mortiprogramador Ver Mensaje
<saludos>
Sobre lo que se comenta tengo lo siguiente

1. Cambiar el id por el nombre
Respecto a esto, pregunto, según lo que comentas de las tablas,
entonces debes imprimir es el campo clase en donde quieres ver
la descripción de la misma

2. En cuanto a que no salga la totalidad de los registros, no será
tal vez por el where de la consulta?
Si ejecutas el query en el motor con el filtro que estás haciendo,
cuantos registros obtienes?

Revisa eso y nos cuentas
</saludos>
Hola mortiprogramador, he probado cambiando el filtro y ahora si me imprimen todos, solo que de esta manera sigo imprimiendo números:

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

Hora --- Lunes - Martes
19:00 --- 1 ------ 0
20:00 --- 2 ------ 3
21:00 ----0 ------ 4

Si intento imprimirlos desde la tabla clase las clases salen repetidas:

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

Así que siguiendo vuestros consejos he probado haciéndolo por filas y a la vez insertando directamente en la tabla horas el nombre de la clase y creo que así ya está correcto:

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

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

¿Es mejor así con solo dos tablas o sería mejor retomar la opción anterior y hacer otra tabla para las clases?. La opción que me gustaría dejar más adelante es que el mismo usuario cree su propia tabla de horarios desde 0.

Gracias por vuestra ayuda, saludos
  #6 (permalink)  
Antiguo 14/01/2014, 14:02
 
Fecha de Ingreso: enero-2014
Mensajes: 75
Antigüedad: 10 años, 3 meses
Puntos: 11
Respuesta: Preparando una tabla mysql para hacer un horario semanal de clases en html

Hola compañero.

No te lo tomes a mal, pero.... ¿Porqué os gusta tanto complicaros la vida? jeje, verás, entiendo que cada clase, que es un número, es un nombre de una clase, con lo cual:

- 1 = Bachata
- 2 = Salsa
- 3 = pues otra clase :S

Con lo cual, tu haces la consulta a la BBDD y obtienes un numero no? pues te creas una funcion, que le pases un parametro (el numero de la clase) y que te la convierta a un string. El proceso sería el siguiente:

1. Se realiza la consulta a la BBDD.
2. Se recupera el numero (id) correspondiente a la clase.
3. Se pasa ese numero a la funcion pasarClaseaNombre($clase) -- El nombre de la función es orientativo.
4. La función devuelve el nombre de la clase.
5. se imprime la clase.

Esa función, date cuenta que te sirve para todo el código, así aprovechas la "reescritura".

Espero haberte ayudado. Un saludo.
  #7 (permalink)  
Antiguo 14/01/2014, 17:13
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Preparando una tabla mysql para hacer un horario semanal de clases en html

<saludos>
Adicional a lo que te comentas, podrías adicionarl al query actual
2 inner joins por los campos de dia1 y dia2 vs la tabla de las clases,
y traer la descripción de cada uno de los joins
</saludos>
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #8 (permalink)  
Antiguo 15/01/2014, 01:58
 
Fecha de Ingreso: enero-2014
Mensajes: 75
Antigüedad: 10 años, 3 meses
Puntos: 11
Respuesta: Preparando una tabla mysql para hacer un horario semanal de clases en html

Cita:
Iniciado por mortiprogramador Ver Mensaje
<saludos>
Adicional a lo que te comentas, podrías adicionarl al query actual
2 inner joins por los campos de dia1 y dia2 vs la tabla de las clases,
y traer la descripción de cada uno de los joins
</saludos>
Tambien es una opcion, aunque si no sabe realizar ese tipo de consultas, es mejor que empiece por algo mas simple, y poco a poco aprender a realizar consultas así.

Saludos.
  #9 (permalink)  
Antiguo 16/01/2014, 04:31
Avatar de 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 razierplus2 Ver Mensaje
Hola compañero.

No te lo tomes a mal, pero.... ¿Porqué os gusta tanto complicaros la vida? jeje, verás, entiendo que cada clase, que es un número, es un nombre de una clase, con lo cual:

- 1 = Bachata
- 2 = Salsa
- 3 = pues otra clase :S

Con lo cual, tu haces la consulta a la BBDD y obtienes un numero no? pues te creas una funcion, que le pases un parametro (el numero de la clase) y que te la convierta a un string. El proceso sería el siguiente:

1. Se realiza la consulta a la BBDD.
2. Se recupera el numero (id) correspondiente a la clase.
3. Se pasa ese numero a la funcion pasarClaseaNombre($clase) -- El nombre de la función es orientativo.
4. La función devuelve el nombre de la clase.
5. se imprime la clase.

Esa función, date cuenta que te sirve para todo el código, así aprovechas la "reescritura".

Espero haberte ayudado. Un saludo.
Hola razierplus.

He intentado aplicar eso pero hay cosas que aún no se:

1. Se realiza la consulta a la BBDD.

Código PHP:
Ver original
  1. "Select * from x_horas, x_clases, horas";

2. Se recupera el numero (id) correspondiente a la clase.

Aquí puedo obtener con lo anterior bien o el id_clase de horas (clase_dia1 o clase_dia2) o bien el id_clase de clases.

1, 2, 3, 4

3. Se pasa ese numero a la funcion pasarClaseaNombre($clase) -- El nombre de la función es orientativo.
4. La función devuelve el nombre de la clase.
5. se imprime la clase.

Desde el paso nº3 me pierdo. ¿Algún ejemplo parecido?

Cita:
Iniciado por mortiprogramador Ver Mensaje
<saludos>
Adicional a lo que te comentas, podrías adicionarl al query actual
2 inner joins por los campos de dia1 y dia2 vs la tabla de las clases,
y traer la descripción de cada uno de los joins
</saludos>
Hola de nuevo mortiprogramador.

He intentado eso creo varias veces pero no me da el resultado, lo que hice en principio era esto:

Código PHP:
Ver original
  1. $consulta_horas = "select x_clases.id_clase,x_clases.clase, horas.hora, horas.clase_dia1,horas.clase_dia2 from x_clases, horas
  2.                 where              
  3.                 x_clases.id_clase=horas.id_hora;";

De ahí me sale algo así:

Hora Lunes Martes
19:00 1 0
20:00 2 3
21:00 0 4

Luego si intento meter o añador dos joins para imprimir la clase con el nombre desde la tabla x_clases lo hago así pero no me funciona.

Código PHP:
Ver original
  1. $consulta_horas = "select x_clases.id_clase,x_clases.clase, horas.hora, horas.clase_dia1,horas.clase_dia2 from x_clases, horas
  2.                 where              
  3.                 x_clases.id_clase=horas.id_hora;
  4. and
  5.                 x_clases.id_clase=horas.clase_dia1
  6.                 and
  7.                 x_clases.id_clase=horas.clase_dia2             
  8.                 ";
  9. "

Solo me imprime esto:

Hora Lunes Martes

Mi problema sigue siendo el no saber como hacerlo con dos nombres de clase diferentes para una misma hora, es decir no se como cambiar en ninguno de los dos casos los números por los nombres en cada fila.

Saludos.
  #10 (permalink)  
Antiguo 16/01/2014, 05:25
 
Fecha de Ingreso: enero-2014
Mensajes: 75
Antigüedad: 10 años, 3 meses
Puntos: 11
Respuesta: Preparando una tabla mysql para hacer un horario semanal de clases en html

Cita:
1. Se realiza la consulta a la BBDD.

Código PHP:

Ver original

"Select * from x_horas, x_clases, horas";




2. Se recupera el numero (id) correspondiente a la clase.

Aquí puedo obtener con lo anterior bien o el id_clase de horas (clase_dia1 o clase_dia2) o bien el id_clase de clases.

1, 2, 3, 4

3. Se pasa ese numero a la funcion pasarClaseaNombre($clase) -- El nombre de la función es orientativo.
4. La función devuelve el nombre de la clase.
5. se imprime la clase.
Hola compañero.

Un consejo, intenta siempre realizar los pasos que tengas en una aplicacion por separado, una vez que funcione, intenta simplificar el codigo, recuerda esto, siempre hay que ir de lo que mas te haga escribir codigo a lo que menos.

Una vez dicho esto, la consulta que quieres hacer, no te va a devolver unos resultados fiables. Ya que supongo que todas tendran la columna id.

Prueba esto:

1. Se realiza la consulta a la BBDD. La consulta sobre los horarios:
- Deberia devolverte, Id / horario (Texto) / hora (Tipo varchar) / lunes / martes /estos dos deberian devolverte el id de la clase correspondiente.
2. Se recupera el numero (id) correspondiente a la clase. (columnas lunes y martes)
3. Se pasa ese numero a la funcion pasarClaseaNombre($clase) -- El nombre de la función es orientativo.
3.1 Funcionamiento de la funcion:
3.1.1 Se realiza la consulta sql: "SELECT * FROM clases WHERE id='$clase'";
3.2.2 El registro devuelto, tendra la columna nombre, pues la devuelve con un return.
4. La función devuelve el nombre de la clase.
5. se imprime la clase.

No se si ahora lo entiendes mejor, si no es asi, hagamos el codigo parte a parte hasta que veas como se hace, te parece? Un saludo.
  #11 (permalink)  
Antiguo 21/01/2014, 02:31
Avatar de 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

Hola de nuevo.

He intentado hacerlo paso a paso pero sigo sin entender varias cosas:

1. Se realiza la consulta a la BBDD. La consulta sobre los horarios:
- Deberia devolverte, Id / horario (Texto) / hora (Tipo varchar) / lunes / martes /estos dos deberian devolverte el id de la clase correspondiente.

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

2. Se recupera el numero (id) correspondiente a la clase. (columnas lunes y martes)
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>'.$fila["clase_dia1"].'</td>';
  7.                 //echo '<td>'.$fila["clase"].'</td>';                              
  8.                 echo '<td>'.$fila["clase_dia2"].'</td>';               
  9.                 echo '</tr>';                      
  10.             }

3. Se pasa ese numero a la funcion pasarClaseaNombre($clase) -- El nombre de la función es orientativo.
Código PHP:
Ver original
  1. function pasarClaseaNombre($clase)
  2.             {
  3.                 /*3.1 Funcionamiento de la funcion:
  4.                 3.1.1 Se realiza la consulta sql: "SELECT * FROM clases WHERE id='$clase'";*/
  5.                 $buscar_nombre_clase="SELECT * FROM x_clases WHERE id='$clase'";                       
  6.                 /*3.2.2 El registro devuelto, tendra la columna nombre, pues la devuelve con un return.
  7. Justo aquí empiezo a liarme*/
  8. $resultado_buscar_nombre_clase=mysql_query($buscar_nombre_clase);
  9. return $clase;
  10.                
  11.             }
  12.                
  13.  
  14. /* He copiado este ejemplo donde intentaba entender el ejemplo de la función pero no he conseguido hacer lo mismo, así que puse como prueba poner un nº al azar y así si me lee el nº de la clase:
  15.            
  16.                 function cuadrado($núm)
  17.                 {  
  18.                     return $núm * $núm;
  19.                 }
  20.                 echo cuadrado(4);   // imprime '16'.
  21. En mi caso he cambiado $clase al nº para probar ya que no se como llamarlo exactamente.*/
  22.            
  23. echo "Aquí devuelve la clase: " .pasarClaseaNombre(2). " y su nombre en la tabla clase es: ";

La verdad es que sigo un poco liado, ¿que debo de cambiar de estos pasos?

Gracias de nuevo, un saludo.
  #12 (permalink)  
Antiguo 21/01/2014, 12:36
Avatar de guardarmicorreo  
Fecha de Ingreso: noviembre-2012
Ubicación: Córdoba
Mensajes: 1.153
Antigüedad: 11 años, 5 meses
Puntos: 84
Respuesta: Preparando una tabla mysql para hacer un horario semanal de clases en html

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.
__________________
Ayúdame a hacerlo por mi mismo.
  #13 (permalink)  
Antiguo 21/01/2014, 15:20
 
Fecha de Ingreso: enero-2014
Mensajes: 75
Antigüedad: 10 años, 3 meses
Puntos: 11
Respuesta: Preparando una tabla mysql para hacer un horario semanal de clases en html

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:

Cita:
1. Se realiza la consulta a la BBDD. La consulta sobre los horarios:
- Deberia devolverte, Id / horario (Texto) / hora (Tipo varchar) / lunes / martes /estos dos deberian devolverte el id de la clase correspondiente.
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

Cita:
function pasarClaseaNombre($clase)
{
/*3.1 Funcionamiento de la funcion:
3.1.1 Se realiza la consulta sql: "SELECT * FROM clases WHERE id='$clase'";*/
$buscar_nombre_clase="SELECT * FROM x_clases WHERE id='$clase'";
/*3.2.2 El registro devuelto, tendra la columna nombre, pues la devuelve con un return.
Justo aquí empiezo a liarme*/
$resultado_buscar_nombre_clase=mysql_query($buscar _nombre_clase);
return $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.
  #14 (permalink)  
Antiguo 21/01/2014, 21:39
Avatar de 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.
  #15 (permalink)  
Antiguo 22/01/2014, 12:34
 
Fecha de Ingreso: enero-2014
Mensajes: 75
Antigüedad: 10 años, 3 meses
Puntos: 11
Respuesta: Preparando una tabla mysql para hacer un horario semanal de clases en html

Cita:
Código PHP:

Ver original

function nombreClase($clase){
//global $conexion; //Esto solo si la variable de conexion esta fuera de este archivo

$sql = "SELECT * FROM x_clases WHERE id_clase='$clase'";
$consulta = mysql_query($sql);
$datos = mysql_fetch_array($consulta);
return $datos["clase"];
}
echo "Probando el resultado a imprimir, que aquí sería: " .nombreClase(4). "<br />";
$nombre_xclase= nombreClase(3);//Otro ejemplo solo de prueba
echo $nombre_xclase;
Cual ha sido el resultado de los echo? te han mostrado bien los datos?
  #16 (permalink)  
Antiguo 22/01/2014, 12:52
Avatar de 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

Hola de nuevo razierplus2, el resultado que tenía con el echo era correcto y me imprimía correctamente los nombres, solo que no sabía que paso seguir y tampoco que era posible meter la variable que lee la consulta como por ejemplo $fila["clase_dia1"] y $fila["clase_dia2"] dentro del nombre de la función.

Ahora he creado algo así y parece que ya sale:

Código PHP:
Ver original
  1. echo "Probando el resultado que sería: " .nombreClase(4). "<br />";            
  2.             $nombre_xclase= nombreClase(3);
  3.             echo $nombre_xclase;
  4.             $consulta_final = "select x_clases.id_clase,x_clases.clase, horas.hora, horas.clase_dia1,horas.clase_dia2 from x_clases, horas
  5.                    where              
  6.                    x_clases.id_clase=horas.id_hora;";
  7.             $resultado_consulta_final=mysql_query($consulta_final);
  8.             while($fila=mysql_fetch_array($resultado_consulta_final))          
  9.             {                  
  10.                 echo '<tr>';               
  11.                 echo '<td>'.$fila["hora"].'</td>';                             
  12.                 echo '<td>'.nombreClase($fila["clase_dia1"]).'</td>';                                  
  13.                 echo '<td>'.nombreClase($fila["clase_dia2"]).'</td>';              
  14.                 echo '</tr>';              
  15.             }
¿Era la manera de hacerlo con funciones o al menos hasta donde tenía que llegar con el ejemplo?.

Gracias de nuevo, saludos.
  #17 (permalink)  
Antiguo 22/01/2014, 14:25
 
Fecha de Ingreso: enero-2014
Mensajes: 75
Antigüedad: 10 años, 3 meses
Puntos: 11
Respuesta: Preparando una tabla mysql para hacer un horario semanal de clases en html

Efectivamente, asi se hace, si el resultado que sale, es sadisfactorio para ti, entonces ya lo has hecho.

Saludos.
  #18 (permalink)  
Antiguo 27/01/2014, 12:07
Avatar de 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

Hola de nuevo.

Gracias de nuevo razierplus2, ahora entiendo como hacerlo de esta manera y sí me sale todo perfectamente, de todas formas me gustaría aprender y ver si soy capaz de hacerlo como intentaba al principio solo desde mysql, así que retomo el tema para seguir ahora con la otra opción.

Como decía anteriormente he probado varias opciones con varias tablas, incluso una de forma horizontal a la hora de imprimir donde creaba la tabla horas y directamente incluía el nombre de la clase y salía perfectamente:

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

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


Luego volví a la opción primera donde creo todas las tablas posibles como días, horas, clases, horarios y usuarios pero claro a la hora de imprimirlo en una tabla sigo sin encontrar la manera así que volví al último ejemplo y me sigue saliendo esto:

x_horas
-----------
id_hora
hora
clase_dia1
clase_dia2
id_horario
id_usuario

x_clases
-----------
id_clases
clase

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

Hasta aquí me sigue imprimiendo los números de la tabla x_horas en la fila clase_dia1 y clase_dia2, solo haciendo la función del post anterior lograría sacarlo.

Ahora si le incluyo de prueba una de las las opciones de que la clase_dia1 sea igual al nombre de la clase en la tabla clase por ejemplo de esta manera si saldría, pero solo 1:
Código PHP:
Ver original
  1. $consulta_horas ="select x_horas.hora, x_horas.clase_dia1, x_horas.clase_dia2, x_clases.clase from x_clases,x_horas
  2. where
  3. x_horas.id_hora=x_clases.id_clase
  4. and
  5. x_horas.clase_dia1=x_clases.id_clase
  6. ";
  7. $resultado_horas=mysql_query($consulta_horas);
  8.             while($fila=mysql_fetch_array($resultado_horas))           
  9.             {                  
  10.                 echo '<tr>';               
  11.                 echo '<td>'.$fila["hora"].'</td>';                             
  12.                 echo '<td>'.$fila["clase"].'</td>';            
  13.                 //echo '<td>'.$fila["clase_dia1"].'</td>';
  14.                 echo '<td>'.$fila["clase_dia2"].'</td>';               
  15.                 echo '</tr>';              
  16.             }

Si intento cambiar también el número del segundo día por el nombre de la clase ahi es cuando no lo consigo de ninguna manera, ya que si le añado otra opción a la anterior consulta como por ejemplo and x_horas.clase_dia2=x_clases.id_clase o bien repite la clase o simplemente no aparecería ningún resultado. ¿que debo de cambiar en lo anterior tanto de la consulta como de la impresión de resultados?

Saludos.

Etiquetas: clases, horario, html, mysql, select, sql, tabla
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 20:30.