这里有一个mysql表:friends
:
followed INT, <-- The user's id ( the follower is following him )
followedby INT <-- The follower's id
和表updates
:
updateid INT,
updatetext TEXT,
updatetime DATETIME
uid INT
一个用户ID为2的家伙登录了,他想查看他关注的用户的更新。目前,他只关注3个用户。要选择更新,我可以执行以下操作:
SELECT * FROM updates WHERE ( uid=10 , uid=20 OR uid=30 ) ORDERBY updatetime DESC LIMIT 10
问题
我想选择后面跟着loggedin用户的用户,并想选择这些用户的更新。用户可以有很多朋友。请帮忙。
您可以使用子查询和IN()
SELECT *
FROM updates
WHERE uid IN(SELECT followed FROM friends WHERE followedby = USERS_ID_HERE)
ORDER BY updatetime DESC LIMIT 10
尝试对SQL语句进行以下更新,以在whereMySQL Docs子句中实现子选择:
SELECT *
FROM updates
WHERE uid IN (SELECT followed
FROM friends
WHERE followedby = '$current_user_id')
ORDER BY updatetime DESC
LIMIT 10
$current_user_id
是当前登录到您的系统的用户的ID。
这是一个复杂的问题("用户可以有很多朋友"部分)。如果你的应用程序变得太大,数据库将无法容纳在一台服务器上,你将不得不进行碎片化。这时,您将遇到现有架构的问题。
一些大型网站通过为每个用户创建个人"物化"新闻源来解决这个问题。
但是,我想,你现在不需要这个。请参阅其他答案。:-)