[英]MySQL : LEFT JOIN for 4 tables which are connected to each other
我有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
現在,我需要在用於Android應用的核心PHP中創建一個REST API,因為我將獲得兩個參數country_id
和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
子句,但是如果刪除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
使用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, ?)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.