Trước hết, bạn không nên sử dụng các hàm mysql_, chúng không được dùng nữa. Ít nhất, bạn nên chuyển sang mysqli_ (một công tắc khá dễ dàng) hoặc tốt hơn, hãy tìm hiểu cách sử dụng PDO . Việc chuyển đổi sẽ hơi khác một chút và liên quan nhiều hơn, nhưng mã của bạn sẽ tốt hơn và an toàn hơn cho nó.
Nói cách khác:logic của bạn khá chính xác. Giới hạn kết quả của bạn ở 5 kết quả hàng đầu cho mỗi khóa học trong một truy vấn không phải là điều dễ dàng thực hiện với SQL theo hiểu biết của tôi, vì vậy kế hoạch của bạn là tốt:truy vấn danh sách các khóa học, sau đó duyệt qua chúng với truy vấn hiện có của bạn, chạy nó một lần cho mỗi khóa học, với LIMIT 5 để nhận top 5.
Bạn cũng có thể giữ quá trình tạo bảng trong vòng lặp này, vì nó là một bảng cho mỗi khóa học. Bạn muốn di chuyển truy vấn VehName ra khỏi vòng lặp, vì bạn chỉ cần chạy truy vấn đó một lần.
Ngoài ra, một số lời khuyên PHP không được yêu cầu:bất kỳ văn bản nào bên ngoài thẻ sẽ chỉ được xuất trực tiếp, vì vậy hãy tận dụng tính năng tạo mẫu tích hợp của nó và cú pháp thay thế để làm cho mã tạo bảng của bạn đẹp hơn:
<?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>