Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Лента новостей. Аналог ВКонтакте. Помогите реализовать 
V
    Опции темы
EasyTask
Дата 9.3.2011, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 26.7.2010

Репутация: нет
Всего: нет



Здравствуйте! Столкнулся с необходимостью организовать лену новостей, наподобие лент в социальных сетях. Помогите выбрать наиболее предпочтительную и универсальную технологию/алгоритм. На данный момент реализация такова:

Имеется две таблицы:
Post и Subscribers. 

Post
В этой таблице нас интересуют поля Post (Сообщение) и User_ID (Идентификатор автора сообщения)

Subscribers
Эта таблица хранит значения о подписках пользователя. Имеет два поля Owner_ID (Идентификатор подписчика) Subscriber_ID (Идентификатор юзера, на чьи новости подписывается подписчик)

Долгие размышления над алгоритмом ни к чему кроме как "Получаем список юзеров, на которых мы подписаны, а после делаем выборку по ихним ID из таблицы Post" не привели. Сделал все очень кустарным способом. Алгоритм работает, но что если у юзера будет 50? 100? 500? подписок? Не думаю что запрос "SELECT * FROM `post` WHERE `user_id` = '1' OR `user_id` = '2' OR `user_id` = '3' ... OR `user_id` = '500' корректен. Это же колоссальная нагрузка на сервер. Поделитесь советом, как можно реализовать данный алгоритм более рационально? 

В данный момент все выглядит так:
Код

  $news_query = mysql_query("SELECT * FROM `subscribers` WHERE `owner_id` = '".id_convert($_SESSION['login'])."'");
  $subscribers_query = "SELECT * FROM `post` WHERE ";
  
  while ($row = mysql_fetch_assoc($news_query))
  {
    $subscribers_query = $subscribers_query."`user_id` = '".$row['subscriber_id']."' OR ";
  }
  $subscribers_query = substr($subscribers_query, 0, -3);
  
  $news_query = mysql_query($subscribers_query);

На выходе получаю запрос к таблице POST с тучей операторов OR (Кол-во зависит от количества подписок хозяина ленты)

Моя задача: получить сообщения из таблицы POST, всех тех юзеров, ИД которых есть в списке подписок. 
Заранее всем спасибо!

Это сообщение отредактировал(а) EasyTask - 9.3.2011, 11:33
PM MAIL   Вверх
EasyTask
Дата 11.3.2011, 09:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 26.7.2010

Репутация: нет
Всего: нет



Решение до сих пор  не найдено :(( Пожалуйста, помогите, кто может.
PM MAIL   Вверх
patap
Дата 11.3.2011, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 893
Регистрация: 7.5.2005
Где: Украина, Зп

Репутация: 26
Всего: 40



Код

SELECT post.* FROM post
INNER JOIN subscribers ON subscribers.subscriber_id = post.user_id
WHERE subscribers.owner_id = [user_id_here]


рекомендую почитать про JOINы в SQL

Это сообщение отредактировал(а) patap - 11.3.2011, 10:50


--------------------
На боку кобура болталась, сзади шашка отцовская звякала. 
Впереди меня все хохотало, а позади все плакало (с)
PM MAIL ICQ   Вверх
EasyTask
Дата 11.3.2011, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 26.7.2010

Репутация: нет
Всего: нет



Огромное спасибо smile) Все получилось очень компактно и круто.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1138 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.