我有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
答案 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, ?)