PHP+MySQL多SELECT语句获取各泳姿最快记录并展示到表格
7年级各泳姿最快记录查询与表格展示方案
更高效的单查询方案(推荐)
不用写多个SELECT语句,直接通过GROUP BY一次性获取所有泳姿的最快记录,减少数据库交互次数。假设你的数据表名为swim_records,包含grade(年级)、stroke(泳姿)、name(姓名)、time(成绩时间)字段,修改后的代码如下:
<?php // 数据库连接配置,替换成你的实际信息 $servername = "localhost"; $username = "你的用户名"; $password = "你的密码"; $dbname = "你的数据库名"; // 创建并检查数据库连接 $conn = new mysqli($servername, $username, $password, $dbname); if ($conn->connect_error) { die("连接失败: " . $conn->connect_error); } // 核心查询:按泳姿分组,取每组最快时间 $sql = "SELECT stroke, name, MIN(time) AS fastest_time FROM swim_records WHERE grade = 7 GROUP BY stroke ORDER BY stroke"; $result = $conn->query($sql); // 生成HTML表格 echo "<table border='1'> <tr> <th>泳姿</th> <th>姓名</th> <th>最快时间</th> </tr>"; if ($result->num_rows > 0) { // 遍历结果输出每行数据 while($row = $result->fetch_assoc()) { echo "<tr> <td>" . $row["stroke"] . "</td> <td>" . $row["name"] . "</td> <td>" . $row["fastest_time"] . "</td> </tr>"; } } else { echo "<tr><td colspan='3'>暂无7年级泳姿记录</td></tr>"; } echo "</table>"; $conn->close(); ?>
关键说明:
WHERE grade = 7:筛选出7年级的所有记录GROUP BY stroke:按泳姿对记录分组MIN(time):自动计算每组中的最小时间(也就是最快成绩)- 最后通过循环直接把查询结果渲染成表格,逻辑简单清晰
基于数组的多查询方案(如果你想坚持用多个SELECT)
先定义所有要查询的泳姿数组,循环执行每个泳姿的查询,把结果存入数组后再统一生成表格:
<?php // 数据库连接部分同上,替换成你的配置 $servername = "localhost"; $username = "你的用户名"; $password = "你的密码"; $dbname = "你的数据库名"; $conn = new mysqli($servername, $username, $password, $dbname); if ($conn->connect_error) { die("连接失败: " . $conn->connect_error); } // 定义需要查询的泳姿列表 $target_strokes = ["自由泳", "仰泳", "蛙泳", "蝶泳"]; $all_records = []; // 循环查询每个泳姿的最快记录 foreach ($target_strokes as $stroke) { $sql = "SELECT name, time FROM swim_records WHERE grade = 7 AND stroke = '$stroke' ORDER BY time ASC LIMIT 1"; $result = $conn->query($sql); if ($result->num_rows > 0) { $row = $result->fetch_assoc(); $all_records[] = [ "stroke" => $stroke, "name" => $row["name"], "time" => $row["time"] ]; } else { // 没有记录时填充默认值 $all_records[] = [ "stroke" => $stroke, "name" => "无记录", "time" => "无" ]; } } // 生成表格 echo "<table border='1'> <tr> <th>泳姿</th> <th>姓名</th> <th>最快时间</th> </tr>"; foreach ($all_records as $record) { echo "<tr> <td>" . $record["stroke"] . "</td> <td>" . $record["name"] . "</td> <td>" . $record["time"] . "</td> </tr>"; } echo "</table>"; $conn->close(); ?>
关键说明:
- 用数组
$target_strokes管理所有要查询的泳姿,避免重复编写SELECT语句 - 每次查询后把结果存入
$all_records数组,统一处理空记录情况 - 最后遍历数组生成表格,确保所有泳姿的记录都能展示在同一个表格中
内容的提问来源于stack exchange,提问作者bgarcher
相关产品推荐
相关产品推荐

