Ver Mensaje Individual
  #11 (permalink)  
Antiguo 03/08/2011, 13:14
Yhoni
 
Fecha de Ingreso: mayo-2009
Mensajes: 10
Antigüedad: 15 años
Puntos: 3
Respuesta: Como ejecutar un while dentro de un while

Cita:
Iniciado por vgonga1986 Ver Mensaje
Vale, creo que ahora lo veo un poco mejor, y tu problema es la consulta SQL, que no devuelve lo que tú crees que devuelve. Según tú, la tabla horarios tiene estos campos:
- tabla_horarios: id_horario, horario, id_pista

Luego tendrás un registro para cada horario y cada pista. Si cada pista tiene 4 horas posibles y tienes tres pistas, tendrás 12 horarios en la tabla de horarios, por ejemplo.

Lo que tú quieres hacer es imprimir los mismos horarios para varios días, pero date cuenta que en la base de datos sólo los tienes puestos una vez. Ahí está el problema!!! Tu código hace la consulta fuera de la función y se la pasa a la función. La función ejecuta todos los fetchs para imprimir el primer día. Pero luego la vuelves a llamar con la misma consulta (es decir, con el mismo resultset), pero el fetch ya no va a devolver más resultados, porque ya ha llegado al final. Entiendes?

Solución: muy sencilla, mete la consulta dentro de la función y quítala del parámetro:
Código PHP:
Ver original
  1. function horarios($dias) {
  2.        $sql1=mysql_query ('SELECT * FROM tabla_horarios order by horario')or die(mysql_error());
  3.        while ($valores=mysql_fetch_array($sql)) {
  4.        // ordenamos la aparicion de los horarios de las pistas en las celdas  con id_pista
  5.           if ($valores['id_pista'] == 1) {
  6.              echo '<tr>';
  7.              /* verificamos que si es el primer registro mostramos la celda con el numero del dia y un rowspan para ocupar todas las celdas de horarios de un dia*/
  8.              if ($valores['id_horario'] == 1) {
  9.                 echo '<td rowspan=11>Dia '.$dias.'</td>';
  10.              }
  11.              echo '<td>'.$valores['horario'].'</td>';
  12.           }
  13.           if ($valores['id_pista'] == 2) {
  14.              echo '<td>'.$valores['horario'].'</td>';
  15.           }
  16.           if ($valores['id_pista'] == 3) {
  17.              echo '<td>'.$valores['horario'].'</td></tr>';
  18.           }
  19.        }
  20.     }

Luego la llamas con:

Código PHP:
Ver original
  1. $dia=27;
  2. while ($dia < $ultimodia) {
  3.    horarios($dia);
  4.    $dia++;
  5. }

Creo que con esto ya está todo, ya que ahora cada vez que ejecutes la función se volverá a hacer la consulta y tendrás el $result listo para recorrer todos los horarios.

Un saludo.
Genial compi, con ese simple e inteligente cambio se ha solucionado el problema y ya tengo la funcion realizando el bucle a la perfección como puedes ver:
Código:
Mes de Marzo
	Pista1	Pista2	Pista3
Dia 27	09:00/10:15	09:30/10:45	10:00/11:15
10:15/11:30	10:45/12:00	11:15/12:30
11:30/12:45	12:00/13:15	12:30/13:45
12:45/14:00	13:15/14:30	13:45/15:00
14:00/15:15	14:30/15:45	15:00/16:15
15:15/16:30	15:45/17:00	16:15/17:30
16:30/18:00	17:00/18:30	17:30/19:00
18:00/19:30	18:30/20:00	19:00/20:30
19:30/21:00	20:00/21:30	20:30/22:00
21:00/22:30	21:30/23:00	22:00/23:30
22:30/24:00	23:00/24:30
Dia 28	09:00/10:15	09:30/10:45	10:00/11:15
10:15/11:30	10:45/12:00	11:15/12:30
11:30/12:45	12:00/13:15	12:30/13:45
12:45/14:00	13:15/14:30	13:45/15:00
14:00/15:15	14:30/15:45	15:00/16:15
15:15/16:30	15:45/17:00	16:15/17:30
16:30/18:00	17:00/18:30	17:30/19:00
18:00/19:30	18:30/20:00	19:00/20:30
19:30/21:00	20:00/21:30	20:30/22:00
21:00/22:30	21:30/23:00	22:00/23:30
22:30/24:00	23:00/24:30
Dia 29	09:00/10:15	09:30/10:45	10:00/11:15
10:15/11:30	10:45/12:00	11:15/12:30
11:30/12:45	12:00/13:15	12:30/13:45
12:45/14:00	13:15/14:30	13:45/15:00
14:00/15:15	14:30/15:45	15:00/16:15
15:15/16:30	15:45/17:00	16:15/17:30
16:30/18:00	17:00/18:30	17:30/19:00
18:00/19:30	18:30/20:00	19:00/20:30
19:30/21:00	20:00/21:30	20:30/22:00
21:00/22:30	21:30/23:00	22:00/23:30
22:30/24:00	23:00/24:30
Dia 30	09:00/10:15	09:30/10:45	10:00/11:15
10:15/11:30	10:45/12:00	11:15/12:30
11:30/12:45	12:00/13:15	12:30/13:45
12:45/14:00	13:15/14:30	13:45/15:00
14:00/15:15	14:30/15:45	15:00/16:15
15:15/16:30	15:45/17:00	16:15/17:30
16:30/18:00	17:00/18:30	17:30/19:00
18:00/19:30	18:30/20:00	19:00/20:30
19:30/21:00	20:00/21:30	20:30/22:00
21:00/22:30	21:30/23:00	22:00/23:30
22:30/24:00	23:00/24:30
LLevaba una semana investigando y no veía el motivo de que no se repitiera el bucle, gracias a ti puedo seguir avanzando en el desarrollo del sistema de reserva.

Gracias mil desde aquí a ti y a todos los que ayudais a los que tenemos menos conocimientos.