MySQL Twitter / Facebook, как статус канала - PullRequest
1 голос
/ 24 декабря 2010

У меня есть две таблицы. Один с именем status вот так ...

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

и т.д ... а другой по имени users_following вот так ...

user_id |  is_following
--------+-----------
      1 |  2
      1 |  3
      2 |  1
      3 |  2

означает, что пользователь 1 следует за обоими пользователями 2 и 3 и т. Д. *

Итак, допустим, я выбрал пользователя 1. Каков наилучший запрос (с точки зрения производительности), чтобы показать обновления статуса пользователей, за которыми следует пользователь 1, в данном случае пользователи 2 и 3

В настоящее время у меня есть что-то вроде

SELECT * from status WHERE user_id IN(SELECT is_following FROM users_following 
WHERE user_id='1') LIMIT 0,5 

но я не думаю, что это хорошо для производительности, если пользователь следил за тысячами + пользователей

1 Ответ

1 голос
/ 24 декабря 2010
  1. Вы забыли ORDER BY date_posted DESC (или status_id)
  2. 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. Не существует одинарных кавычек вокруг целого числа 1
2. Вы должны создать составной индекс user_id + is_following

...