我有两张桌子。一个像这样的名字。。。

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

也就是说,userstatus同时跟踪usersusers_following1等。。。
所以,假设我选择了user2。显示用户3正在跟踪的用户的状态更新的最佳查询(性能方面)是什么,在本例中是用户11
现在我有点像
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/

10-16 03:17