Существует 4 таблицы:
posts(id
post_share(shared_by, post_id
friendship(friend_one, friend_two, status)
add_viewer(id
Используя приведенные выше 4 таблицы, мне нужно получать посты для отображения в ленте новостей пользователя. В настоящее время я использую только первый запрос, что означает, что я не добавляю общий доступ друзей пользователя в его / ее ленту новостей. Теперь мне нужно показать общий пост тоже, как в фейсбуке.
Для этого я создал новый запрос (2-й). Теперь я хочу соединить их вместе и получить только одну таблицу или . Хотелось бы узнать, есть ли лучший способ справиться с этим
Предполагая, что в настоящий момент вошедший в систему user_id равен 22,
SELECT concat(a.fname, ' ', a.lname) as name, a.id as user_id , p.id as post_id, p.content, p.media FROM posts p
INNER JOIN add_viewers a
ON p.user_id = a.id
WHERE p.user_id in (
SELECT a.id FROM friendships f
INNER JOIN add_viewers a
ON f.friend_one = a.id OR f.friend_two = a.id
WHERE friend_one=22 OR friend_two=22 AND f.status='confirmed'
GROUP BY a.id
)
ORDER BY created_at DESC
LIMIT 10
OFFSET 0
во втором запросе, s.shared_by
означает человека, который разделяет сообщение, и p.user_id
означает человека, который создал сообщение.
SELECT concat(a.fname, ' ', a.lname) as name, a.id as user_id , p.id as post_id, p.content, p.media FROM post_shares s
INNER JOIN posts p
ON p.id = s.post_id
INNER JOIN add_viewers a
ON p.user_id = a.id
WHERE s.shared_by in (
SELECT a.id FROM friendships f
INNER JOIN add_viewers a
ON f.friend_one = a.id OR f.friend_two = a.id
WHERE friend_one=22 OR friend_two=22 AND f.status='confirmed'
GROUP BY a.id
)
ORDER BY created_at DESC
LIMIT 10
OFFSET 0