如何将多个表一起链接到单个查询中

时间:2013-09-16 10:58:28

标签: php mysql database-design

我需要帮助。我从未使用复杂的数据库,我不知道如何安排表格。我需要一个带有孩子姓名的表格,这些表格与他们的父母帐户相关联(在提交注册表格时使用$_POST['children_name']等),但现在我需要将他们的学校与他们的成绩联系起来(例如我在8一个年级,然后他们的班级与个别年级学校科目,然后链接标记(如美国的A +)和个别孩子的缺席。

我不知道如何做到这一点。我举了一个例子,如下图所示。请你帮助我好吗?

(注意那里有3个表)

Image

稍后编辑: Fluffeh的解决方案,有点编辑! “ 我会为你的表考虑以下结构。

首先,该网站将为所有学校提供数据表。

id    schoolname
 1     European College#1
 2     European Colelge#2

然后,列出了大学里活跃的所有课程。

id    Class
 1    8A
 2    8B
 3    8C

然后是所有学校提供的科目表。您需要一个ID,然后根据需要提供任何其他信息。

    schoolSubject
id  name
1   mathematics
2   geography
    3       physics
    4       geometry

接下来是一张包含学校,班级和学校科目之间关系的表格。

relations
SchoolID   ClassID     SubjectID
1           1               1
1           1               2
1           1               4

(所以,如果我的逻辑是正确的,来自“欧洲大学#1”的8A级学生将学习数学,地理和几何学)

最后,我们需要知道哪个学生来自哪里。

students
id  name        class_id   schoolname_id
1   John Doe     1           1
2   Jane Doe     2           2

最后一个tabe几乎让我们能够为同一个科目记录同一个学生的多个成绩 - 如果学生必须参加 一个主题不止一次。

grades
subjectID   studentID   grade
1           1           B,A,B
1           2           A,B,B
2           1           A,C,C
2           2           B,A,A

有了这个结构,我可以使用什么查询?

1 个答案:

答案 0 :(得分:1)

我会为你的表考虑以下结构。

首先,学校提供的科目表。您需要一个ID,然后根据需要提供任何其他信息。

schoolSubject
id  name
1   mathematics
2   geography

接下来是一个包含学生信息的表格。同样,我们有一个唯一的ID,然后根据需要提供任何信息

student
id  name
1   John Doe
2   Jane Doe

下一个表允许所谓的多对多关系。基本上它意味着您可以为同一主题创建多个条目(每个学生可以注册多个条目)和多个学生条目(因为学生可以注册多个科目)。

studentEnrolment
subjectID   studentID
1           1
1           2
2           1

最后一个tabe几乎让我们能够为同一个科目记录同一个学生的多个成绩 - 如果学生必须参加 一个主题不止一次。

grades
subjectID   studentID   grade
1           1           B
1           2           A
2           1           A
2           2           B

有了这个结构,你可以进行如下查询:

select
    subj.name,
    stud.name,
    grad.grade
from
    schoolSubject subj
        join studentEnrolment enr
            on subj.id=enr.subjectID
        join student stud
            on enr.studentID=stud.studentID
        join grades grad
            on subj.subjectID=grad.subjectID
            and stud.id=grad.studentID