En primer lugar, no debería usar las funciones mysql_, están en desuso. Como mínimo, debe cambiar a mysqli_ (un cambio bastante fácil), o mejor, aprenda a usar PDO . Cambiar es un poco diferente y más complicado, pero su código será mejor y más seguro.
Con eso fuera del camino:tu lógica es bastante precisa. Limitar sus resultados a los 5 mejores resultados para cada curso en una consulta no es algo que se haga fácilmente con SQL que yo sepa, por lo que su plan es bueno:consulte una lista de cursos, luego recorralos con su consulta existente, ejecutándola una vez para cada curso, con un LÍMITE de 5 para obtener los 5 primeros.
También puede mantener la generación de tablas dentro de este ciclo, ya que es una tabla por curso. Le gustaría mover la consulta VehName fuera del ciclo, ya que solo necesita ejecutarla una vez.
Además, algunos consejos de PHP no solicitados:cualquier texto fuera de las etiquetas se generará directamente, así que aproveche sus plantillas integradas y sintaxis alternativa para hacer que su código de generación de tablas sea más agradable:
<?php
/* Gather your data here... */
?>
<table>
<tr><th>Best Scores for <?php echo $vehName['Veh_name'] ?></th></tr>
</table>
<table border='1'>
<tr>
<th>Course</th>
<th>Score</th>
<th>Distance</th>
<th>Player</th>
<th>Time</th>
</tr>
<?php while($row = mysql_fetch_array($result_HiScores)): ?>
<tr>
<td><?php echo $row['course'] ?></td>
<td><?php echo $row['score'] ?></td>";
<td><?php echo $row['distance'] ?></td>";
<td><?php echo $row['User'] ?></td>";
</tr>
<?php endwhile; ?>
</table>