У меня есть три таблицы (пользователь, друзья, сообщения) и два пользователя (user1 и user2).
Когда user1 добавляет user2 в качестве друга, тогда user1 может видеть сообщения пользователя2, как на Facebook. Но только сообщения после даты, когда user1 добавил user2 в качестве друга. Мой запрос выглядит следующим образом:
SELECT * FROM posts p JOIN friends f ON p.userid = f.friendid
AND s.time >= f.friend_since WHERE f.myid='user1id'
Затем он дает мне все сообщения о пользователе2 после даты с момента добавления в качестве друга. Но проблема в том, что он скрывает сообщения user1s и показывает только сообщения user2s после добавления даты.
user1 должен видеть все свои собственные сообщения и все сообщения пользователя2, которые user2 отправил после даты добавления в качестве друга.
Как я могу это исправить?
Вы можете присоединиться к результатам другого запроса с помощью UNION
, например:
SELECT *
FROM posts p
JOIN friends f ON p.userid = f.friendid AND s.time >= f.friend_since
WHERE f.myid='user1id'
UNION SELECT *
From posts p
WHERE p.userid='user1id'
Получить всех друзей ids user1
, а затем выбрать все сообщения .. WHERE ( p.userid IN ( FRIENDS_IDS ) AND s.time >= f.friend_since ) OR p.userid = USER_ID
Этот способ намного быстрее, чем объединения и объединения в один запрос.
SELECT * FROM posts AS p LEFT JOIN friends f ON ( p.userid = f.friendid AND p.time >= f.friend_since ) OR ( f.myid = 'user1id' )