Ваша структура таблиц довольно запутана со всеми этими идентификаторами отправителя и получателя, но я думаю, что следующий запрос будет работать.
SELECT * FROM
(SELECT Users.Name, Events.text
FROM Users
LEFT JOIN Friends ON Users.Id = Friends.ReceiverId
LEFT JOIN Events ON Friends.SenderId = Events.SenderId
WHERE Users.Id = 1)
UNION ALL
(SELECT Users.Name, Events.text
FROM Users
LEFT JOIN Friends ON Users.Id = Friends.ReceiverId
LEFT JOIN Events ON Friends.SenderId = Events.ReceiverId
WHERE Users.Id = 1)
Вероятно, вы можете упростить это, но я не уверен, как, учитывая, что вы хотите выбрать события 1-5, потому что идентификатор друга может быть либо Events.SenderId, либо Events.ReceiverId.
Я не знаю, поддерживает ли это SQL, но, возможно, поместите OR
в предложение LEFT JOIN
(?):
SELECT Users.Name, Events.text
FROM Users
LEFT JOIN Friends ON Users.Id = Friends.ReceiverId
LEFT JOIN Events ON (Friends.SenderId = Events.SenderId OR Friends.SenderId = Events.ReceiverId)
WHERE Users.Id = 1