2017-02-12 64 views
0

我有3个表:获取学生信息,并在一个查询其他关系,并存储在一个对象中的MySQL + PHP

1. Students 
- StudentID 
- StudentName 
- etc... 

2. Students_Classes 
- StudentID 
- ClassID 

3. Classes 
- ClassID 
- ClassName 
- etc... 

目前,我有两个疑问通过这种方式来存储一个学生的细节和他的课

首先,我运行此查询并返回结果给PHP对象我打电话$学生

select StudentID, StudentName, etc..., group_concat(DISTINCT stu_to_cla.ClassID) as currentStudentClassesID from Students LEFT JOIN (Students_Classes as stu_cla, Student.StudentID = stu_cla.StudentID) where StudentID = 1 

,我使用$ ClassesID =爆炸( '',$学生[ 'currentStudentClassesID']到阵列,并将它传递至第二查询:

select(ClassID, ClassName, etc... from (Classes) where ClassesID IN ($ClassesID) 

现在我有两个目的,一个存储学生信息和他的班级信息。

我的问题是我可以改进它只有一个查询返回他的信息和他的类,我怎样才能在PHP中正确使用它?

UPDATE

现在我有另一种情况,当我有这样几个关系:学生 - 班,学生 - 宿舍,学生 - 美国...

所以我可以得到所有的一个学生信息关于一切,并将其存储在只有 PHP中的一个对象?我应该如何构建最有效和轻量级的mySQL查询? 使用一个大查询立即获取所有内容先构建学生对象然后构建其他关系对象之后

+1

JOIN单查询使用的概念:http://www.w3schools.com/sql/sql_join.asp –

+0

你的第一个查询将返回语法错误 – Strawberry

+0

顺便说一句,如果DISTINCT是必要的,那么你可能有您的数据模型存在严重问题 – Strawberry

回答

1
SELECT s.StudentID 
    , s.StudentName 
    , c.ClassID 
    , c.classname 
    from Students s 
    JOIN `Students-Classes` sc 
    ON sc.StudentID = s.StudentID 
    JOIN classes c 
    ON c.classid = sc.classid 
where s.StudentID = 1; 
+0

尽管此代码可以回答这个问题,提供了关于如何和/或为什么它解决了这个问题将改善答案的长期价值附加的上下文。 –

+0

此方法将在每个记录中返回每个ClassID和ClassName以及重复的Student信息。如果我需要学生信息,我只需要在查询数组中调用第一条记录。如果我需要类信息,我会将结果数组放入循环中。 – user7057468

+0

是的。我上面描述的方法是正确的方法。不管查询 – Strawberry

0

不可能使用单个查询将数据存储在多个表中。

您还需要插入我会在课堂上表。这是不可能在一个查询中完成的。

+0

是的,我也怀疑过,但仍想知道我是否可以改进。 – user7057468

+0

我看不出这个答案的问题的相关性被问 – Strawberry

相关问题