php - 如何使用 php 和 mysql 使用多对多关系提取数据

标签 php mysql sql

我知道这个问题可能会被问几次,但在某些时候我无法理解我问这个的原因。

问题来了

我有三个表,它们之间有像多对多关系一样的关系

表格

   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'
        ]
      ]
  ];

关系挖掘

enter image description here

所以请在这种情况下帮助我,因为我看过很多教程并用谷歌搜索但没有得到这个。

最佳答案

我还没有测试过这个,我不确定模式结构是否很容易连接,但类似这样

为了澄清这里发生了什么。我们从一个表中进行选择,并使用公共(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/

相关文章:

php - "elseif"和 "else if"完全是同义词吗?

php - 我在哪里定义索引?

mysql - MSSQL 到远程 MySQL 700k 行

mysql - 如何营造安全的本地开发环境?

带有 select 语句的 MySQL if()

C++ SQLite3 在更新后立即返回一个空查询

php - heroku 上的 cURL 超时

MySQL 多次更新查询与一次插入 ... 关于重复键更新查询

mysql - 从两个表连接中获取前两条唯一记录 - Mysql

php - 适用于所有浏览器的 CSS 弹出框