Buenas, creo que la sentencia que usas es totalmente correcta para obtener lo que quieres, sólo he quitado lo que no necesitas pues ya lo tienes cuando construyes la sentencia (no mostrar datos necesarios mejora el rendimiento)
Código:
select h.hora, hg.dia
from horario h,horario_grupo hg
where hg.id_horario=h.id_horario and
hg.id_grado_grupo='$id_grado_grupo' and
h.id_escuela='$escuela'
order by h.hora, hg.dia
Este sentencia te mostrará los datos así (por ejemplo)
9:00 1
9:00 3
10:00 1
10:00 3
11:00 1
11:00 2
12:00 1
12:00 2
13:00 1
13:00 2
13:00 3
Ahora ya es cuestión de programación el mostrarlos en una tabla como la que quieres hacer:
________________________
lunes: martes: miercoles:
________________________
9:00 9:00
10:00 10:00
11:00 11:00
12:00 12:00
13:00 13:00 13:00
Para ello sólo necesitas un resultado, que es el que te da la sentencia sql anterior, pero por algoritmo tendrás que hacer los huecos.
Me explico, las horas te dan las filas y los días de la semana las columnas. Si para una hora tienes un salto del día 1 al dia 3, lo unico que tienes que hacer es insertar un <td> </td> por cada día de la semana que te falte.
Un ejemplo rápido y sin probarlo sería este: (aunque esto sería para el foro de php)
Código PHP:
$hora=0; // última hora tratada, como no empezamos lo ponemos a 0
$dia=1; // último dia tratado, como no empezamos lo ponemos a lunes (1)
$resultado=mysql_query("select h.hora hora, hg.dia dia from horario h,horario_grupo hg where hg.id_horario=h.id_horario and hg.id_grado_grupo='$id_grado_grupo' and h.id_escuela='$escuela' order by h.hora, hg.dia");
while ($fila=mysql_fetch_array($resultado)
{
if ($hora != $fila['hora']) // Cambia la hora
{
// antes de hacer el cambio de fila, se pueden hacer las celdas de cierre de fila en el caso de que
// la fila anterior no acabara en el último día de la semana. Lo dejo sin hacer.
if ($hora != 0) echo "</tr>" // para las horas siguientes a la primera se cierra la fila
echo "<tr>"; // Cambio de hora implica cambio de fila
$hora = $fila["hora"]; // Última hora tratada pasa a ser la actual
$dia = 1; // el último día tratado hay que reiniciarlo
}
while ($dia < $row['dia])
{
echo "<td></td>"; // mostramos un dia vacío
$dia++; // pasamos al siguiente día
}
echo "<td>$fila['hora]</td>"; // muestra la hora en un dia
}
Un saludo.