问题清楚了吗?基本上我有这些表:
|------------| |-----------------|
| Group | | Student-Subject |
|------------| |-----------------|
| id | | id |
| group_name | | student_id |
|------------| | subject_id |
|-----------------|
|--------------| |--------------|
| Student | | Subject |
|--------------| |--------------|
| id | | id |
| student_name | | subject_name |
| group_id | |--------------|
|--------------|
如果我必须解释这种关系(这很明显,但要明确),学生有很多科目,而且学科有很多学生。它们通过Student-Subject表连接。
除此之外,学生分组。它们通过group_id字段连接到组表。
现在,我想要达到的目标是,我想获得群体模型的主题。基本上,我想得到小组中所有学生的所有科目。当然我已经有了自己的解决方案:
SELECT subject.id, subject.subject_name
FROM tbl_student_subject studsubj
LEFT JOIN tbl_student student ON student.id = studsubj.student_id
RIGHT JOIN tbl_subject subject ON subject.id = studsubj.subject_id
WHERE student.group_id = 1
如果您观察到图片(查询结果),则会复制主题。我认为这已经足够了,但我当然不希望它们重复。
所以,我想通过提出这个问题来实现的目标是,如何在不重复的情况下获得结果?我是否正确使用我的SQL脚本?
当我在这时,我想在Laravel Eloquent模型中这样做。但是使用“hasManyThrough”方法无法实现。如果可能的话,我将使用这个原始SQL来完成我想要实现的目标。
我希望有人理解并能够回答我的问题并更正我的剧本。谢谢!
答案 0 :(得分:0)
这是一个简单的答案。我只需要在查询中添加DISTINCT。
SELECT DISTINCT subject.id, subject.subject_name
FROM tbl_student_subject studsubj
LEFT JOIN tbl_student student ON student.id = studsubj.student_id
RIGHT JOIN tbl_subject subject ON subject.id = studsubj.subject_id
WHERE student.group_id = 1