В настоящее время я работаю в социальной сети. Я решил завязать дружеские отношения (как это делает 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
)
Других решений пока нет …