В настоящее время я работаю над социальной сетью. Я решил установить отношения с друзьями (например, FB) вместо следующих пользователей (например, TW), и вот моя проблема.
Итак, у меня есть 3 таблицы (пользователи, сообщения, друзья).
Я хотел бы сделать это, чтобы, если у пользователя нет друзей (или просто отправлено приглашение [friends_type == 1 в таблице друзей]), отображаются только его сообщения.
Моя идея для этого: SELECT * FROM users, posts, friends WHERE friends_status=4
, но когда у пользователя есть друзья, я хотел бы видеть сообщения от него и его друзей.
И, конечно, это мой SQL-запрос, который я сделал: SELECT * FROM posts, users, friends WHERE user_id=post_author AND friends_status=4 AND (friend_friendid=user_id OR friend_userid=user_id) ORDER BY post_id DESC
.
В принципе, я хочу добиться того, что Facebook имеет на домашней странице (бесконечная шкала времени, где вы можете прокручивать и прокручивать). Мой вопрос: как построить этот запрос?
Это один из способов, используя подзапрос, чтобы найти друзей:
select *
from posts
where post_author = {user_id}
or post_author in
(
select friend_friendid from friends
where friend_userid = {user_id}
and friend_status != 1
)