Исправление SQL INNER JOIN - PullRequest
       2

Исправление SQL INNER JOIN

0 голосов
/ 29 февраля 2012

Я написал этот оператор sql:

SELECT 
  e.id AS event_id, e.title, e.date, e.category, e.place, e.minAge, e.maxAge,
  p.id, p.name, p.coor, p.nz,
  a.user, a.event, COUNT(a.user) AS attending,
  i.user_id, i.event_id
FROM events AS e
LEFT JOIN attendance a ON a.event = e.id
LEFT JOIN places p ON p.id = e.place
LEFT JOIN invited_friends i ON ( i.event_id = e.id ) AND ( i.user_id = 0 )
GROUP BY e.id
ORDER BY attending DESC

Этот оператор выбирает события из событий таблицы и объединяет некоторые таблицы.пока все хорошо.У меня есть еще одна таблица: invited_friends.

event_id    bigint(20)    
user_id     int(11)   
owner       tinyint(1)

В этой таблице хранятся идентификаторы пользователей, приглашенных на событие.

Проблема в том, что не каждое событие является частным, а не каждоеСобытие получило приглашенных друзей ... как я могу определить, является ли событие личным или нет, это столбец: категория в таблице событий, если = 4, то это личное событие.

Мое внутреннее объединение работает, но оно игнорирует все публичные мероприятия, потому что у них нет приглашенных друзей.

Как я могу это исправить?

Заранее спасибо.

Ответы [ 4 ]

2 голосов
/ 29 февраля 2012
...
FROM events AS e
LEFT JOIN attendance a ON a.event = e.id
LEFT JOIN places p ON p.id = e.place
LEFT JOIN invited_friends i ON ( i.event_id = e.id ) AND ( i.user_id = 0 )

WHERE category != 4  or i.event_id is not null

...
2 голосов
/ 29 февраля 2012

Я не уверен, что понимаю проблему.Просто сделайте ВНУТРЕННЕЕ СОЕДИНЕНИЕ.Он будет работать так же, как и сейчас, и, если приглашенных друзей нет, он заполнит часть Invite_friends нулями.Это сделает так, что публичные мероприятия без друзей будут заполнены ... просто без друзей.

0 голосов
/ 29 февраля 2012

вы можете использовать LEFT JOIN вместо INNER JOIN

0 голосов
/ 29 февраля 2012

LEFT OUTER JOIN по приглашенным друзьям, а не по прямой INNER JOIN.

Это должно дать вам желаемый результат.

См. http://en.wikipedia.org/wiki/Join_(SQL)#Left_outer_join

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...