簡體   English   中英

組合多個MySQL JOIN查詢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM