Как сократить длительный запрос, запустив ресурсы mysql, требующие многократного поиска? - PullRequest
0 голосов
/ 29 сентября 2011

Я хочу разрешить пользователям подписываться на других пользователей, как в твиттере. Допустим, Джон подписался на обновления Том , Крис , Дэвид и 10 других.

Когда Джон проверяет его ленту новостей, как я могу отображать новости от всех, на кого он тоже подписан, без выполнения длинного запроса, подобного этому:

select * from news where user='tom' and user='chris' and user='david' so on...

Выполнение этого может привести к 1 длинному запросу и задействует много ресурсов mysql. Ищете правильный метод или любые альтернативы, которые являются более эффективными.

Ответы [ 2 ]

4 голосов
/ 29 сентября 2011

Вам нужна отдельная таблица соответствия, у которой есть subscriber_id и subspped_id .. индексировать таблицу по subscriber_id.

Тогда вы можете

Select news.*
From news n
    Join subscriptions s
       On s.subscribed_id = n.user_id
Where subscriber_id = <user id of john>
0 голосов
/ 29 сентября 2011

ваша логика неверна,
совпадений для user = multiple user

логически не должно быть

user in('tom', 'chris', 'david', ....);

, однако использование целочисленного столбца с индексом эффективно
как то, что @Nick B предлагает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...