MySQL:4个相互连接的表的LEFT JOIN

时间:2019-01-01 11:43:07

标签: php mysql rest api join

我有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

现在,我需要在核心PHP 中为Android应用创建一个REST API,因为我将获得两个参数 country_id {{ 1}} 。两者都将包含多个值,例如 course_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,2,我期望的输出应该是:

country_id = 2,3

更新:

以上问题已解决,但现在面临的新问题是多次| university_id | | 3 | ,结果如下:

如果university我得到的答复是:

course_id = 2,3

为此,我使用了|university_id | ------------------ |3 | |3 | 子句,但是如果删除GROUP BY则得到500 Internal Server Error可以正常工作。这可能是什么问题?

我的新查询如下:

GROUP BY

1 个答案:

答案 0 :(得分:0)

使用LEFT OUTER JOIN而不是LEFT JOIN

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, ?)