Först och främst bör du inte använda mysql_-funktionerna, de är utfasade. Åtminstone bör du byta till mysqli_ (en ganska enkel växling), eller bättre, lär dig hur du använder PDO . Det är lite annorlunda och mer involverat att byta, men din kod blir bättre och säkrare för det.
Med det ur vägen:din logik är ganska korrekt. Begränsa dina resultat till de fem bästa resultaten för varje kurs i en fråga är inte något som jag vet lätt att göra med SQL, så din plan är bra:fråga en lista med kurser, bläddra sedan igenom dem med din befintliga fråga, kör den en gång för varje kurs, med en LIMIT 5 för att få topp 5.
Du kan lika gärna behålla bordsgenereringen inom denna loop också, eftersom det är ett bord per kurs. Du skulle vilja flytta VehName-frågan ur slingan, eftersom du bara behöver köra den en gång.
Dessutom några oönskade PHP-råd:all text utanför taggarna kommer bara att matas ut direkt, så dra nytta av dess inbyggda mall och alternativ syntax för att göra din tabellgenereringskod snyggare:
<?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>