0

这是我的 PHP 数据库结构: http: //pastebin.com/x89AdzfS

我已经尝试了几个小时来使用 PDO 获得 JOIN SQL 查询,但失败了,所以我需要一些帮助。

我需要一个 PDO 查询来显示分配给学生也注册的班级 ID 的所有“作业”(标题和描述)。

如果您需要我说得更具体,请告诉我。谢谢!

编辑

这是我做的一个查询,它显示了一个人所在的班级

$sql = $db->prepare("SELECT enrollments.*, courses.*, students.* FROM enrollments
LEFT JOIN courses ON enrollments.course_id = courses.id
LEFT JOIN students ON students.id = enrollments.student_id
WHERE enrollments.student_id = ?
");
$sql->execute(array($login_id));

while($row = $sql->fetch(PDO::FETCH_ASSOC))
     {
    echo "<li><a href='class.php?id=".$row['course_id']."'><i class='icon-book'></i>".$row['name']."</a></li>";
}
4

1 回答 1

2

这是一个相对简单的连接来完成我认为你所追求的。

$sql = $db->prepare("SELECT 
  title, 
  description, 
  courses.name
FROM assignments
JOIN courses ON courses.id = assignments.course_id
JOIN enrollments USING(course_id)
WHERE enrollments.student_id = ?");

$sql->execute(array($login_id));

我对查询的思考过程是这样的:

  1. 决定哪个是“主”表。你说“显示所有作业”,所以它是“作业”
  2. 该表是 FROM 之后的第一个表
  3. 知道我有某个学生,找到对域逻辑有意义的“student_id”的最短路径
  4. 我看到“注册”有一个 student_id,我的作业注册有一个 course_id;这就是我通往 student_id 的道路
  5. 加入与分配关系中涉及的因素的注册(当列与 USING() 同名时,SQL 很容易

与您的查询的区别(如我所见)是使用您的绝对目标实体作为原始 FROM 表,然后从那里加入。如果你想要分配,查询应该以 开头FROM assignments,然后使用连接来拉入你需要用来限制结果的数据。

于 2012-08-15T01:49:31.007 回答