[英]Combining Multiple MySQL JOIN Queries
我有這個查詢,其中包含用戶注冊的類的分配ID。
$sql = $db->prepare("SELECT assignments.*, enrollments.course_id, enrollments.student_id
FROM assignments
LEFT JOIN enrollments
ON assignments.course_id = enrollments.course_id
LEFT JOIN completed
ON assignments.id != completed.assignment_id
WHERE enrollments.student_id = ?
ORDER BY assignments.id DESC LIMIT 10
");
$sql->execute(array($login_id));
while($row = $sql->fetch())
{
echo $row['id'];
}
在我看到作業被標記為已完成的情況下,進行另一次檢查的最佳方法是什么?
這意味着它還需要檢查“已完成”表並確保沒有行,其中$ login_id和assignment.id一起出現在所選的任何分配中。
這是我現在要查找已登錄用戶的已完成分配ID的查詢。
$sqlcomplete = $db->prepare("SELECT * FROM completed
INNER JOIN students ON completed.student_id = students.id
WHERE completed.student_id = ?
");
$sqlcomplete->execute(array($login_id));
while($row = $sqlcomplete->fetch(PDO::FETCH_ASSOC))
{
echo "<li>You have completed assignment with ID ".$row['assignment_id']."</li>";
}
我試圖做一個更復雜的JOIN
但我似乎無法弄明白。 我還考慮通過單獨查詢該數據庫創建一個用戶已完成的分配ID的數組,並將該ID放入while檢查中,但我覺得這不是最好或最有效的解決方案。
您可以使用LEFT JOIN
,當completed.assignment_id IS NULL
則表示從已完成的表中返回的匹配項不存在。
SELECT assignments.*, enrollments.course_id, enrollments.student_id
FROM assignments
LEFT JOIN enrollments ON assignments.course_id = enrollments.course_id
LEFT JOIN completed ON assignments.id = completed.assignment_id
WHERE enrollments.student_id = ?
AND completed.assignment_id IS NULL
ORDER BY assignments.id DESC LIMIT 10
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.