Prima di tutto, non dovresti usare le funzioni mysql_, sono deprecate. Come minimo, dovresti passare a mysqli_ (un passaggio abbastanza semplice), o meglio, impara a usare PDO . È un po' diverso e più complicato da cambiare, ma il tuo codice sarà migliore e più sicuro per questo.
Detto questo:la tua logica è piuttosto accurata. Limitare i risultati ai primi 5 risultati per ogni corso in una query non è qualcosa che si può fare facilmente con SQL per quanto ne so, quindi il tuo piano è buono:interroga un elenco di corsi, quindi scorreli con la tua query esistente, eseguendola una volta per ogni corso, con un LIMIT 5 per ottenere i primi 5.
Potresti anche mantenere la generazione della tabella all'interno di questo ciclo, poiché è una tabella per corso. Vorresti spostare la query VehName fuori dal ciclo, dal momento che devi eseguirla solo una volta.
Inoltre, alcuni consigli PHP non richiesti:qualsiasi testo al di fuori dei tag verrà semplicemente emesso direttamente, quindi approfitta del suo modello integrato e di sintassi alternativa per rendere più gradevole il codice di generazione delle tabelle:
<?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>