我目前有一条SQL语句,用于在表格中填写学生姓名和他们在给定学期内所从事的运动的名称。运动的名称与Sport_ID存储在运动表中。然后,Sport_ID与choices表中的Choice_ID相对应。然后,将这个Choice_ID放在表Student_Choices中标记为T1_Choice,T2_Choice和T3_Choice的每个术语的列中。如何从我的SQL语句中获取T2_Choice和T3_Choice?感谢您的帮助。
$stmt = $conn->prepare(
"SELECT st.Name AS student, s.Name AS sport
From Sports AS s INNER JOIN Choices AS c
ON s.Sport_ID = c.Sport_ID INNER JOIN Student_Choices AS sc
ON sc.T1_Choice = c.Choice_ID INNER JOIN Students AS st
ON st.Username = sc.Username
");
$stmt->execute();
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo '<tr>
<td>'.$row['student'].'</td>
<td>'.$row['sport'].'</td>
<td>'.$row['sport'].'</td>
<td>'.$row['sport'].'</td>
</tr>
';
}
答案 0 :(得分:1)
解决方案是您可以多次向表调用JOIN。因为“选择”中的“ Choice_ID”需要链接到“ Student_Choices”表中的不同术语选择。因此,您需要使用不同的别名多次联接Choices表,并且对于每个实例,您需要使用不同的别名联接Sports表。我的解决方案是:
("SELECT st.Name AS student, T1.Name AS T1, T2.Name AS T2, T3.Name AS T3
From Students AS st INNER JOIN Student_Choices AS sc
ON st.Username = sc.Username
INNER JOIN Choices AS c1
ON sc.T1_Choice = c1.Choice_ID
INNER JOIN Sports AS T1
ON c1.Sport_ID = T1.Sport_ID
INNER JOIN Choices AS c2
ON sc.T2_Choice = c2.Choice_ID
INNER JOIN Sports AS T2
ON c2.Sport_ID = T2.Sport_ID
INNER JOIN Choices AS c3
ON sc.T3_Choice = c3.Choice_ID
INNER JOIN Sports AS T3
ON c3.Sport_ID = T3.Sport_ID
");