显示某些MySQL表

时间:2012-08-15 01:35:51

标签: php mysql database pdo

这是我的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>";
}

1 个答案:

答案 0 :(得分: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. 之后的第一个表
  4. 知道我有一个学生,找到“student_id”的最短路径,这对于域逻辑是有意义的
  5. 我看到“注册”有一个student_id,我的作业注册有一个course_id;这是我通往student_id的路径
  6. JOIN注册与其分配关系所涉及的因素(当列与USING()相同的名称时,SQL很容易使用
  7. 与您的查询(我认为)的不同之处在于使用您的绝对目标实体作为原始FROM表,然后从那里加入。如果您想要分配,查询应该以{{1​​}}开头,然后使用连接来提取您需要用来限制结果的数据。