Първо, не трябва да използвате функциите mysql_, те са отхвърлени. Най-малкото трябва да преминете към mysqli_ (доста лесно превключване), или по-добре, научете как да използвате PDO . Превключването е малко по-различно и по-трудно, но вашият код ще бъде по-добър и по-безопасен за него.
Като оставим това настрана:логиката ви е доста точна. Ограничаване на вашите резултати до първите 5 резултата за всеки курс в една заявка не е нещо, което се прави лесно със SQL, доколкото ми е известно, така че планът ви е добър:заявете списък с курсове, след това ги преминете със съществуващата си заявка, изпълнявайки я веднъж за всеки курс, с ЛИМИТ 5 за получаване първите 5.
Можете също така да запазите генерирането на таблица в този цикъл, тъй като това е таблица за курс. Бихте искали да преместите заявката VehName извън цикъла, тъй като трябва да я изпълните само веднъж.
Също така, някои непоискани PHP съвети:всеки текст извън таговете просто ще бъде изведен директно, така че се възползвайте от неговите вградени шаблони и алтернативен синтаксис за да направите вашия код за генериране на таблици по-добър:
<?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>