这是一个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
问题
我想选择登录用户所遵循的用户,并希望这些用户选择更新。 用户可以有很多朋友。请帮忙。
答案 0 :(得分:4)
您可以使用子查询和IN()
SELECT *
FROM updates
WHERE uid IN(SELECT followed FROM friends WHERE followedby = USERS_ID_HERE)
ORDER BY updatetime DESC LIMIT 10
答案 1 :(得分:2)
尝试对SQL语句进行以下更新以实现sub-select in the where MySQL 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。
答案 2 :(得分:0)
这是一个复杂的问题(“用户可以有很多朋友”部分)。如果您的应用程序变得太大,数据库将无法放在单个服务器上,您将不得不进行分片。那时你会遇到现有架构的问题。
一些大型网站通过为每个用户创建个人“物化”新闻源来解决此问题。
但是,我想,你现在不需要这个。看到其他答案。 : - )