Tout d'abord, vous ne devriez pas utiliser les fonctions mysql_, elles sont obsolètes. Au moins, vous devriez passer à mysqli_ (un changement assez facile), ou mieux, apprenez à utiliser PDO . C'est un peu différent et plus compliqué de changer, mais votre code en sera meilleur et plus sûr.
Avec cela à l'écart:votre logique est assez précise. Limiter vos résultats aux 5 meilleurs résultats pour chaque cours dans une requête n'est pas quelque chose qui se fait facilement avec SQL à ma connaissance, donc votre plan est bon :interrogez une liste de cours, puis parcourez-les avec votre requête existante, en l'exécutant une fois pour chaque cours, avec un LIMIT 5 pour obtenir le top 5.
Vous pouvez également conserver la génération de table dans cette boucle, car il s'agit d'une table par cours. Vous voudriez déplacer la requête VehName hors de la boucle, puisque vous n'avez besoin de l'exécuter qu'une seule fois.
De plus, quelques conseils PHP non sollicités :tout texte en dehors des balises sera simplement sorti directement, alors profitez de ses modèles intégrés et syntaxe alternative pour rendre votre code de génération de table plus agréable :
<?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>