No es sencillo lo que intentás, y desde ya escapa a html ó css, esto es para el foro de php.
Por otra parte los datos que ponés no son muy completos, además tu imagen muestra una fila de encabezados con los dias de la semana y luego aparentemente solo se ven 2 horas, del contenido, nada.
La única idea que se me ocurre es recorres la tabla mysql para cada día de la semana y para los eventos del mismo día que no estén vacíos vas creando una cadena, por ejemplo
Código PHP:
Ver original$lunes .= "<tr><td>" . $fechainicio . "-" . $fechafin . "</td></tr>";
$martes .= "<tr><td>" . $fechainicio . "-" . $fechafin . "</td></tr>";
una vez que tenés todos y terminaste el bucle, recien ahí imprimís la tabla (tenés la ventaja que ya sabes el número de columnas. Harías esto (lo simplifico)
Código PHP:
Ver original<tr><th>lunes</th><th>martes</th><th>miercoles</th></tr>
<tr>
<td>
<table>
$lunes
</table>
</td>
<td>
<table>
$martes
</table>
</td>
<td>
<table>
$miercoles
</table>
</td>
</tr>
Saludos