PHP MySQL关联表查询问题:显示学生ID而非姓名
解决查询结果显示学生ID而非姓名的问题
看起来你遇到了关联表查询的小问题——当前的SQL只从times表获取数据,而student字段存储的是关联students表的ID,所以输出的是数字ID而非学生姓名。咱们只需要两步就能搞定:
第一步:修改SQL查询语句,关联两张表
使用INNER JOIN(如果要包含无对应学生的记录可以用LEFT JOIN)把times和students表关联起来,这样就能同时获取时间记录和对应的学生姓名:
SELECT t.id, t.time, t.date, t.notes, s.firstName, s.lastName FROM times t INNER JOIN students s ON t.student = s.ID
这里给表起了别名t(代表times)和s(代表students),让SQL代码更简洁易读。
第二步:更新PHP输出逻辑,显示学生姓名
把原来输出$row["student"]的地方,改成输出学生的全名(firstName + lastName):
<?php $sql = "SELECT t.id, t.time, t.date, t.notes, s.firstName, s.lastName FROM times t INNER JOIN students s ON t.student = s.ID"; $result = $conn->query($sql); if ($result->num_rows > 0) { while($row = $result->fetch_assoc()) { echo "id: " . $row["id"]. " - Student: " . $row["firstName"] . " " . $row["lastName"]. " - Time: " . $row["time"]. " - Date: ".$row["date"]. " - Notes: ".$row["notes"]."<br>"; } } else { echo "0 results"; } $conn->close(); ?>
完整的修改后代码
把数据库连接和查询部分整合在一起,就是这样:
<?php $servername = "localhost"; $username = "root"; $password = ""; $dbname = "timedrun"; $conn = new mysqli($servername, $username, $password, $dbname); if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } else { echo "Connected successfully<br>"; } ?> <?php $sql = "SELECT t.id, t.time, t.date, t.notes, s.firstName, s.lastName FROM times t INNER JOIN students s ON t.student = s.ID"; $result = $conn->query($sql); if ($result->num_rows > 0) { while($row = $result->fetch_assoc()) { echo "id: " . $row["id"]. " - Student: " . $row["firstName"] . " " . $row["lastName"]. " - Time: " . $row["time"]. " - Date: ".$row["date"]. " - Notes: ".$row["notes"]."<br>"; } } else { echo "0 results"; } $conn->close(); ?>
补充说明
INNER JOIN只会返回两张表中匹配成功的记录,也就是只有当times表的studentID在students表中存在时才会显示。- 如果你的
times表中有student字段为NULL的记录,想要保留这些记录的话,把INNER JOIN改成LEFT JOIN即可,此时姓名部分会显示为空字符串。
内容的提问来源于stack exchange,提问作者Blatherwick
相关产品推荐
相关产品推荐

