MySQL: LEFT JOIN для 4 таблиц, которые связаны друг с другом - PullRequest
0 голосов
/ 01 января 2019

У меня есть 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) university_courses

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

Теперь мне нужно создать один REST API в Ядро PHP для Android-приложения, в котором я получу два параметра 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, но получаю 500 Internal Server Error, если я удаляю GROUP BY Это будет работать нормально Что может бытьпроблема?

Мой новый запрос выглядит следующим образом:

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

1 Ответ

0 голосов
/ 01 января 2019

использовать левое внешнее соединение, а не левое соединение

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, ?)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...