Мой вариант: Создать таблицу subs, создать 2 поля "на кого подписался" , "кто подписался".
норм. primary key по двум полям не забудьте.
Через foreach проверять подписчиков и с сессией пользователя, и в зависимости от true или false выводить контент страницы.
Это про ленту новостей как я понял? Вы хотите в цикле делать запросы? А если подписок будет несколько сотен?
Вообще задача отображения ленты событий - она весьма не тривиальная, и чем больше нагрузка - тем более она не тривиальная.
Пока у вас мало трафика решение в лоб - 2 запроса:
1) получаем user_id людей чьи посты надо показать
2) получаем посты select * from post where user_id IN (1,2,3,4)
именно так, в 2 запроса, без вложенных подзапросов!
Если подписчиков меньше ~1000 - будет работать хорошо.
Когда станет трафика сильно побольше - возникает более быстрое но более геморройное решение:
Для каждого пользователя храним в каком то быстром хранилище (например redis) id последних например 500-1000 постов которые он может видеть в ленте. Когда кто то делает пост - добавляем в список каждого его подписчика нужные id. Когда кто то удаляет пост / удаляет подписку - полностью перегенерим соответствующие списки.
На выводе соответственно
1) получаем этот список id постов
2) делаем select ... from post where id in (...)
Минус решения - нельзя без извращений и доп слоёв логики посмотреть более старые посты.