这是我当前的代码:
$varVeh=$_POST['Veh_num'];
$sql_HiScores = "SELECT
c.course_name as course,
e.distance as distance, e.score as score,
e.time as time, e.user as User
FROM hc_entries e
LEFT JOIN hc_course c on e.course=c.course_num
WHERE e.vehicle=$varVeh
ORDER BY course, score DESC";
$result_HiScores = mysql_query($sql_HiScores);
$sql_vehName="SELECT Veh_name FROM hc_vehicle_type WHERE Veh_num=$varVeh ";
$result_vehName = mysql_query($sql_vehName);
$vehName=mysql_fetch_assoc($result_vehName);
echo "<table><tr><th>Best Scores for ".$vehName['Veh_name']."</th></tr></table>";
echo "<table border='1'>";
echo "<tr><th>Course</th><th>Score</th><th>Distance</th><th>Player</th><th>Time</th></tr>";
while($row = mysql_fetch_array($result_HiScores))
{
echo "<tr>";
echo "<td>" .$row['course'] . "</td>";
echo "<td>" .$row['score'] . "</td>";
echo "<td>" .$row['distance'] . "</td>";
echo "<td>" .$row['User'] . "</td>";
}
echo "</table>";
我想我要做的是创建一个查询,从e.course中选择*来构建一个数组。然后循环使用数组结果对现有查询进行循环。最后,我想为每门课程显示单独的表格,并将其限制为每门课程的前5个结果。
有人能证实或否认我的逻辑,并指出我的方向吗?
最佳答案
首先,您不应该使用mysql_u函数,它们已被弃用。至少,您应该切换到mysqli_(非常简单的切换),或者更好地,学习如何使用PDO。这有点不同,更涉及到切换,但您的代码将更好和更安全。
别提了:你的逻辑相当准确。将你的结果限制在一个查询中的每门课程的前5个结果并不是很容易用SQL来实现的,所以你的计划是好的:查询一个课程列表,然后用你现有的查询循环一遍,为每个课程运行一次,用极限5来获得前5。
您也可以将表生成保持在这个循环中,因为它是每个课程的表。您需要将VehName查询移出循环,因为您只需要运行一次。
另外,还有一些未经请求的PHP建议:标签之外的任何文本都将直接输出,因此利用其内置的模板和alternative syntax来更好地生成表代码:
<?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>
关于php - 通过循环查询创建多个表,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19598904/