【问题标题】:MySQL : LEFT JOIN for 4 tables which are connected to each otherMySQL:LEFT JOIN 用于 4 个相互连接的表
【发布时间】:2019-05-28 10:33:47
【问题描述】:

我有 4 个表如下:

1) 课程

   | ID - > Primary Key | Name
   -------------------------------
   | 1                  | Course 1
   | 2                  | Course 2
   | 3                  | Course 3

2) 个国家

   | IDPrimary Key | Name
   -------------------------------
   | 1                  | Country 1
   | 2                  | Country 2
   | 3                  | Course 3

3) 大学

   | ID - > Primary Key | Name           | country_id
   ---------------------------------------------------
   | 1                  | University 1   | 1
   | 2                  | University 2   | 1
   | 3                  | University 3   | 3

4) 大学课程

   | ID - > Primary Key | university_id  | course_id
   ----------------------------------------------
   | 1                  | 1              | 2
   | 2                  | 3              | 2
   | 3                  | 3              | 3

现在,我需要在 core PHP 中为 android 应用程序创建一个 REST API,因为我将获得两个参数 country_idcourse_id。两者都将包含多个值,例如 country_id = "3,4,5"course_id = "1,6,8"

我必须根据国家课程回复所有相关大学

我尝试了以下查询,但没有得到想要的输出,所以如果有人对我的问题有任何想法,请帮助我。

SELECT * FROM universities LEFT JOIN countries ON countries.id = universities.country_id LEFT JOIN university_courses ON universiity_courses.university_id = universities.id LEFT JOIN courses ON courses.id = university_courses.course_id WHERE FIND_IN_SET(universities.country_id, ?) AND FIND_IN_SET(university_courses.course_id, ?)

如果course_id = 1,2country_id = 2,3,我想要的输出应该是:

| university_id |
| 3             |

更新:

上述问题已解决,但现在面临的新问题是多次得到相同的university 结果,例如:

如果course_id = 2,3 我得到的回复是:

|university_id  |
------------------
|3              |
|3              |

为此,我使用了GROUP BY 子句,但如果我删除GROUP BY 会得到500 Internal Server Error 它会正常工作可能是什么问题?

我的新查询如下:

SELECT * FROM universities LEFT JOIN university_courses ON university_courses.university_id = universities.id LEFT JOIN courses ON courses.id = university_courses.course_id LEFT JOIN countries ON countries.id = universities.country_id WHERE FIND_IN_SET(university_courses.course_id, ?) AND FIND_IN_SET(universities.country_id, ?) GROUP BY university_courses.university_id

【问题讨论】:

  • 更新您的问题添加适当的数据样本..您的实际结果和预期结果

标签: php mysql rest api join


【解决方案1】:

使用左外连接而不是左连接

SELECT * FROM universities LEFT OUTER JOIN countries ON countries.id = universities.country_id LEFT OUTER JOIN university_courses ON universiity_courses.university_id = universities.id LEFT OUTER JOIN courses ON courses.id = university_courses.course_id WHERE FIND_IN_SET(universities.country_id, ?) AND FIND_IN_SET(university_courses.course_id, ?)

【讨论】:

  • 好的!现在 LEFT JOIN 也为我工作,但现在面临新问题:如果course_id = 2,3 然后我得到university_id = 3 两次
  • 我试过GROUP BY,但得到500 INTERNAL SERVER ERROR
猜你喜欢
  • 2013-06-30
  • 2012-10-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-08
  • 2014-12-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多