我知道这个问题可能会被问几次,但在某些时候我无法理解我问这个的原因。
问题来了
我有三个表,它们之间有像多对多关系一样的关系
表格
Teacher Student Subject
+-----------+ +-------------+ +---------------+
| id| name | | id| name | | id| name |
+-----------+ +-------------+ +---------------+
| 1 | Ram | | 1 | Vikram | | 1 | Math |
| 2 | Ajay | | 2 | Sunil | | 2 | English |
| 3 | John | | 3 | Mohan | | 3 | Physics |
| 4 | Eric | | 4 | Pawan | | 4 | Chemistry |
| 5 | Manoj | | 5 | Deepak | | 5 | Biology |
| 6 | Shiv | | 6 | Alex | | 6 | Social Sci|
| | | | 7 | Shawn | | 7 | Hindi |
| | | | 8 | Mark | | 8 | History |
| | | | 9 | Joe | | | |
+-----------+ +-------------+ +---------------+
我必须使用这三个表和连接表来提取数据
连接表(Junction Table)
Teacher_Subject Student_Subject
+-----------------------+ +---------------------------+
|teacher_id |subject_id | | student_id | subject_id |
+-----------------------+ +---------------------------+
| 1 | 7 | | 1 | 1 |
| 1 | 8 | | 1 | 3 |
| 2 | 1 | | 1 | 4 |
| 2 | 3 | | 1 | 5 |
| 3 | 2 | | 2 | 4 |
| 4 | 6 | | 2 | 7 |
| 5 | 4 | | 3 | 1 |
| 6 | 5 | | 3 | 4 |
| | | | 3 | 5 |
| | | | 4 | 2 |
| | | | 4 | 6 |
+-----------------------+ +---------------------------+
使用 mysql 和 php
有什么方法可以通过单个查询提取这些数据
例如
我必须将数据拉到哪里
$student = 'Vikram';
所以我想要的数据就像这个数组
$result = [
'name' => 'Vikram',
'subjects_teacher' => [
[
'subject' => 'Math',
'teacher' => 'Ajay'
],
[
'subject' => 'Physics',
'teacher' => 'Ajay'
],
[
'subject' => 'Chemistry',
'teacher' => 'Manoj'
],
[
'subject' => 'Biology',
'teacher' => 'Shiv'
]
]
];
关系挖掘
所以请在这种情况下帮助我,因为我看过很多教程并用谷歌搜索但没有得到这个。
最佳答案
我还没有测试过这个,我不确定模式结构是否很容易连接,但类似这样
为了澄清这里发生了什么。我们从一个表中进行选择,并使用公共(public)列来创建与另一个表的“连接”。然后我们可以使用该连接表中的值。
所以我们第一次加入
left join Student_Subject on Student.id = Student_Subject.student_id
使用 Student_Subject 中的 id 列和 Student_Subject 中的 Student_id 列加入 Student_Subject。
Student.id = Student_Subject.student_id
select
Student.name,
Teacher.name,
Subject.name
from Student
left join Student_Subject on Student.id = Student_Subject.student_id
left join Teacher_Subject on Student_Subject.subject_id = Teacher_Subject.subject_id
left join Teacher on Teacher_Subject.teacher_id = Teacher.id
left join Subject on Student_Subject.id = Subject.id
where Student.name = 'Vikram'
关于php - 如何使用 php 和 mysql 使用多对多关系提取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41434283/