Først og fremmest bør du ikke bruge mysql_-funktionerne, de er forældede. Du bør i det mindste skifte til mysqli_ (en ret nem skift), eller bedre, lær hvordan du bruger PDO . Det er lidt anderledes og mere involveret at skifte, men din kode vil være bedre og mere sikker for det.
Med det ude af vejen:din logik er ret præcis. Begrænsning af dine resultater til de 5 bedste resultater for hvert kursus i én forespørgsel er ikke noget, der nemt kan udføres med SQL, så vidt jeg ved, så din plan er god:forespørg på en liste over kurser, cyklus derefter gennem dem med din eksisterende forespørgsel, kør den én gang for hvert kursus, med en LIMIT 5 for at få top 5.
Du kan lige så godt holde bordgenereringen inden for denne løkke, da det er et bord pr. kursus. Du vil gerne flytte VehName-forespørgslen ud af løkken, da du kun behøver at køre den én gang.
Også nogle uopfordrede PHP-råd:enhver tekst uden for taggene vil bare blive udskrevet direkte, så drag fordel af dens indbyggede skabelon og alternativ syntaks for at gøre din tabelgenereringskode pænere:
<?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>