SQL-запрос для нескольких (один ко многим) таблиц в базе данных MySQL - PullRequest
1 голос
/ 06 декабря 2011

У меня есть база с турами (групповые экскурсии по городу с гидом).Мне нужен SQL-запрос (для базы данных mysql 5.1.54), который в конечном итоге даст мне массив PHP с информацией из нескольких таблиц вместе.Я могу сделать это, выполнив запрос только для первых 3 таблиц, а затем добавив информацию в таблицы 4 и 5. в цикл foreach.

Но мне нужно использовать запрос для поиска / фильтрации(например: показать все бронирования, где у партнера есть идентификатор 9), поэтому мне нужен SQL для выбора соответствующих бронирований.

  1. Необходимо включить бронирование без партнеров (таблица 4) и / или руководств (таблица 5).
  2. Все партнеры и гиды должны быть включены в результат (резервирование может иметь больше партнеров / гидов)
  3. Должна быть включена вся информация в таблицах 4 и 5 (например, статус из таблицы 4).

Упрощенная версия базы данных:

Таблица 1: резервирования:

id    id_client    id_tour
1     22            6
2     23            5

Таблица 2: клиенты(одно бронирование имеет одного клиента):

id    name
22    John
23    William

Таблица 3: туры (одно бронирование имеет один тур)

id    name
5     big tour
6     small tour    

Таблица4: партнеры (одна резервация может иметь несколько партнеров):

id    id_reservation    id_partner_type    id_partner    status
34    1                 9                  16            1
35    1                 9                  17            0

Таблица 5: направляющие (одна резервация может иметь несколько направляющих):

id    id_reservation    id_guide
18    1                 14
19    1                 15

Я пытался решить эту проблему, но просто не могу получить запрос, выполняющий эту работу.Я использовал GROUP_CONCAT, чтобы получить несколько партнеров и идентификаторы руководства.Самая большая проблема, с которой я столкнулся, - это невозможность включить бронирование, в котором нет партнеров и / или руководств, например, бронирование 2.

1 Ответ

0 голосов
/ 06 декабря 2011

Чтобы включить все бронирования, у которых нет партнеров и гидов, вам нужно использовать OUTER JOINs, например, следующий запрос даст вам всю информацию из ваших таблиц 4, 5, включая ваше состояние:

Select p.*, g.*
from reservations r  
left outer join partners p on p.id_reservation = r.id
left outer join guides g on g.id_reservation = r.id
where p.id_reservation is null and g.id_reservation is null
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...