通过循环查询创建多个表

时间:2013-10-25 20:28:54

标签: php mysql loops

这是我目前的代码:     $ 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名结果。

任何人都可以确认或否认我的逻辑,并指出我的方向吗?

2 个答案:

答案 0 :(得分:1)

将整个表格html放在while循环中,并在查询结尾添加“LIMIT 5”

答案 1 :(得分:1)

首先,您不应该使用mysql_函数,它们已被弃用。至少,您应该切换到mysqli_(非常简单的切换),或者更好,了解如何使用PDO。它有点不同,更多涉及切换,但你的代码会更好,更安全。

解决这个问题:你的逻辑非常准确。在一个查询中将结果限制为前五个每个课程的 根据我的知识不能轻松完成SQL,因此您的计划很好:查询课程列表,然后循环使用它们使用现有查询,为每个课程运行一次,使用LIMIT 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>