我有两张桌子。一个像这样的名字。。。
user_id | status
--------+-----------
1 | random status from user 1
2 | random status from user 2
3 | random message from user 3
4 | staus from user 4
1 | second status for user1
等。。。
还有一个名字是这样的。。。
user_id | is_following
--------+-----------
1 | 2
1 | 3
2 | 1
3 | 2
也就是说,user
status
同时跟踪usersusers_following
和1
等。。。所以,假设我选择了user
2
。显示用户3
正在跟踪的用户的状态更新的最佳查询(性能方面)是什么,在本例中是用户1
和1
现在我有点像
SELECT * from status WHERE user_id IN(SELECT is_following FROM users_following
WHERE user_id='1') LIMIT 0,5
但我认为如果一个用户跟踪了数千个以上的用户,这对性能没有好处
最佳答案
你忘了ORDER BY date_posted DESC
(或status_id
)INNER JOIN
在这里会更好
SELECT s.*
FROM status s
INNER JOIN users_following f ON f.is_following = s.user_id
AND f.user_id = 1
ORDER BY s.status_id DESC
LIMIT 0, 5
笔记
一。整数周围没有单引号
1
2。您应该创建复合索引
user_id + is_following
关于mysql - mysql twitter/facebook之类的状态供稿,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4523317/