我有3张桌子:
1. Students
- StudentID
- StudentName
- etc...
2. Students_Classes
- StudentID
- ClassID
3. Classes
- ClassID
- ClassName
- etc...
目前,我有两个查询以这种方式存储学生详细信息及其课程
首先,我运行此查询并将结果返回给PHP对象我调用 $ Student :
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 = explode(',',$ Student ['currentStudentClassesID'] 用于数组并将其传递给第二个查询:
select(ClassID, ClassName, etc... from (Classes) where ClassesID IN ($ClassesID)
现在我有两个对象,一个存储学生信息,另一个存放班级信息。
我的问题是我可以通过只返回一个返回其信息和类的查询来改进它吗?如何在PHP中正确使用它?
更新
现在我有另一种情况,我有几个关系,如:学生 - 课程,学生 - 宿舍,学生 - 国家......
那么我可以获得所有关于所有内容的学生信息并将其存储在PHP中的 ONLY 一个对象中吗?我应该如何构建最有效,最轻量级的mySQL查询? 使用一个大查询一次性获取所有内容或首先构建学生对象,然后构建其他关系对象?
答案 0 :(得分: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;