【问题标题】:How to get the relevent table data using JOIN Query如何使用 JOIN Query 获取相关表数据
【发布时间】:2017-03-20 07:59:43
【问题描述】:
course{
    course_id,
    course_name,
}
subject{
    subject_id,
    subject_name,
    course_id

}
student{
    email,
    course_id,
}

这是我的代码,它显示所有属于课程的科目

$_GET['email_address']=$_SESSION['email_address'];


$sql="(SELECT c.course_name course_name,su.subject_name subject_name 
   from subject su LEFT JOIN course c ON c.course_id=su.course_id) 
   UNION (SELECT c.course_name course_name,s.email_address email_address 
     from student s LEFT JOIN course c ON s.course_id=c.course_id
    WHERE s.email_address='".$_SESSION['email_address']."')";

当课程由“kamal@gmail.com”完成时,我想获取所有科目属于由“kamal@gmail.com”完成的课程,kamal@gmail.com 是学生电子邮件

样本数据为:

课程:

course_id course_name
1         IT
2         Business
3         Design

主题:

subject_id subject_name course_id
111        html         1
222        java         1
333        Econ         2
444        Photoshop    3 

学生:

email           course_id
kamal@gmail.com 1

然后我想通过 kamal@gmail.com 获取属于 course_id=1 的科目的数据

【问题讨论】:

  • 添加一些示例表数据和预期的结果 - 以及格式正确的文本。同时标记您正在使用的 dbms。
  • course{ course_id, course_name, } course (1,IT), (2,Business), (3,Design)
  • subject{ subject_id, subject_name, course_id } subject(111,html,1), (222,java,1),(333,Econ,2),(444,Photoshop,3)跨度>
  • 学生{电子邮件, course_id, } 学生(kamal@gmail.com,1)
  • 嘿,不像 cmets。改为编辑问题!

标签: php sql join


【解决方案1】:

你只需要几个连接

select su.subject_name, course_name
from student st
inner join subject su
  on su.course_id = st.course_id
inner join course co
  on co.course_id = st.course_id
where st.email = 'kamal@gmail.com'

【讨论】:

    【解决方案2】:

    接下来呢?

    SELECT C.COURSE_NAME, SU.SUBJECT_NAME, S.EMAIL
    FROM COURSE C
    INNER JOIN SUBJECT SU ON SU.COURSE_ID = C.COURSE_ID
    INNER JOIN STUDENT S ON S.COURSE_ID = C.COURSE_ID
    WHERE S.EMAIL = 'kamal@gmail.com'
    

    【讨论】:

      【解决方案3】:

      这是关于您的问题的数据库设计的建议

      表: courses有很多subjects

      +-----------+-------------+---------------------+
      | course_id | course_name | created             |
      +-----------+-------------+---------------------+
      |         1 | CSS         | 2017-03-20 14:21:34 |
      |         2 | HTML        | 2017-03-20 14:21:39 |
      |         3 | JS          | 2017-03-20 14:21:44 |
      |         4 | PHP         | 2017-03-20 14:21:50 |
      +-----------+-------------+---------------------+
      

      表: students有很多courses

      +------------+--------------+------------------+---------------------+
      | student_id | student_name | email            | created             |
      +------------+--------------+------------------+---------------------+
      |          1 | Student 1    | kamal@gmail.com  | 2017-03-20 14:19:32 |
      |          2 | Student 2    | kamal2@gmail.com | 2017-03-20 14:19:32 |
      +------------+--------------+------------------+---------------------+
      

      表: subjects属于courses

      +------------+-----------+--------------+---------------------+
      | subject_id | course_id | subject_name | created             |
      +------------+-----------+--------------+---------------------+
      |          1 |         1 | A            | 2017-03-20 14:20:56 |
      |          2 |         1 | B            | 2017-03-20 14:21:12 |
      |          3 |         2 | C            | 2017-03-20 14:21:22 |
      +------------+-----------+--------------+---------------------+
      

      表格: courses_students多对多coursesstudents

      +----+-----------+------------+---------------------+
      | id | course_id | student_id | created             |
      +----+-----------+------------+---------------------+
      |  1 |         1 |          1 | 2017-03-20 14:44:42 |
      |  2 |         2 |          2 | 2017-03-20 14:44:42 |
      |  3 |         2 |          1 | 2017-03-20 14:44:42 |
      +----+-----------+------------+---------------------+
      

      注意: courses 有很多学生,students 有很多 courses。这是映射表。

      MySQL 查询:

      SELECT
        students.student_name,
        courses.course_name,
        subjects.subject_name
      FROM
        `students`
      LEFT JOIN
        courses_students ON students.student_id = courses_students.student_id
      LEFT JOIN
        subjects ON subjects.course_id = courses_students.course_id
      INNER JOIN
        courses ON courses.course_id = courses_students.course_id
      WHERE
        students.email = 'kamal@gmail.com'
      

      MySQL查询结果:

      +--------------+-------------+--------------+
      | student_name | course_name | subject_name |
      +--------------+-------------+--------------+
      | Student 1    | CSS         | A            |
      | Student 1    | CSS         | B            |
      | Student 1    | HTML        | C            |
      +--------------+-------------+--------------+
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-27
        • 1970-01-01
        • 1970-01-01
        • 2016-04-25
        • 1970-01-01
        相关资源
        最近更新 更多