Здравствуйте. Уже битый час пытаюсь и так, и этак сделать, гугл истерзал на предмет манов и примеров, но всё равно туплю…
id пользователя — 1.
SELECT calendar.* FROM calendar /* Таблица событий */
INNER JOIN subscribes_fields /* Таблица, где содержатся записи подписок на площадки */
ON calendar.id_object = subscribes_fields.id_field /* В id_object записываются id, в данном случае мы ищем id площадок */
WHERE subscribes_fields.id_follower = 1 AND calendar.type = 'field' /* Соответственно, id подписчика — наш, тип события выставлен для площадки, так как айдишники могут быть и от других таблиц и типов */
SELECT calendar.* FROM calendar /* Таблица событий */
INNER JOIN subscribes_events /* Таблица, где содержатся записи подписок на события */
ON calendar.id = subscribes_events.id_event /* Тут проще, подписки на события сразу содержат прямой id события*/
WHERE subscribes_events.id_follower = 1 AND subscribes_events.type = 'user' /* Где подписчик — наш пользователь, тип подписки — пользователи */
Помогите, пожалуйста, соединить эти два запроса в один?
select calendar.*
left join subscribers_fields
ON calendar.id_object = subscribes_fields.id_field AND subscribes_fields.id_follower = 1 AND calendar.type = 'field'
left join JOIN subscribes_events
ON calendar.id = subscribes_events.id_event and subscribes_events.id_follower = 1 AND subscribes_events.type = 'user'
where subscribers_fields.Id is not null OR subscribes_fields.id_field is not null
В итоге все заработало таким макаром(добавил дату и еще одну таблицу):
SELECT calendar.*
FROM calendar
LEFT JOIN subscribes_fields
ON calendar.id_object = subscribes_fields.id_field
AND subscribes_fields.id_follower = 1
AND calendar.type = 'field'
LEFT JOIN subscribes_user_teams
ON calendar.id_object = subscribes_user_teams.id_team
AND subscribes_user_teams.id_follower = 1
AND calendar.type = 'team'
LEFT JOIN subscribes_events
ON calendar.id = subscribes_events.id_event
AND subscribes_events.id_follower = 1
AND subscribes_events.type = 'user'
WHERE ((subscribes_fields.id IS NOT NULL OR subscribes_fields.id_field IS NOT NULL)
OR (subscribes_user_teams.id IS NOT NULL OR subscribes_user_teams.id_team IS NOT NULL))
AND calendar.d_start = 17
AND calendar.m_start = 11
AND calendar.y_start = 2012
SELECT calendar.* FROM calendar /* Таблица событий */
INNER JOIN subscribes_fields /* Таблица, где содержатся записи подписок на площадки */
ON calendar.id_object = subscribes_fields.id_field /* В id_object записываются id, в данном случае мы ищем id площадок */
join JOIN subscribes_events ON calendar.id = subscribes_events.id_event and subscribes_fields.id_follower=subscribes_events.id_follower
WHERE subscribes_fields.id_follower = 1 AND calendar.type = 'field'
?
Это на сколько я понял вашу структуру таблиц и связей.
SELECT calendar.*
FROM calendar AS c
LEFT JOIN subscribes_fields AS f
ON c.id_object = f.id_field
AND f.id_follower = 1
AND c.type = 'field'
LEFT JOIN subscribes_user_teams AS t
ON c.id_object = t.id_team
AND t.id_follower = 1
AND c.type = 'team'
LEFT JOIN subscribes_events AS e
ON c.id = e.id_event
AND e.id_follower = 1
AND e.type = 'user'
WHERE ((f.id IS NOT NULL OR f.id_field IS NOT NULL)
OR (t.id IS NOT NULL OR t.id_team IS NOT NULL))
AND c.d_start = 17
AND c.m_start = 11
AND c.y_start = 2012