Чтобы выбрать все сообщения из определенного профиля, вы просто сделаете следующий запрос:
SELECT *
FROM posts
WHERE profile_id = (the id number)
Чтобы получить все профили и их данные, которым понравился данный пост, вы должны сделать следующее:
SELECT *
FROM profiles
WHERE profile_id IN (
SELECT profile_id
FROM like
WHERE post_id = (the post id number) )
Объединение этих двух запросов с IN позволит вам указать профиль и получить данные профиля для всех тех, кому понравилась любая запись в профиле этого человека. Запрос будет выглядеть так
SELECT *
FROM posts
WHERE profile_id = (the id number)
Чтобы получить все профили и их данные, которым понравился данный пост, вы должны сделать следующее:
SELECT *
FROM profiles
WHERE profile_id IN (
SELECT profile_id
FROM like
WHERE post_id IN (
SELECT post_id
FROM posts
WHERE profile_id = (the id number) )
Если вы хотите получить список информации о сообщении, а также данные профиля для всех, кому понравились каждое сообщение и сами сообщения, вы должны использовать JOIN следующим образом ...
SELECT *
FROM profiles JOIN posts ON (profiles.post_id = posts.post_id)
WHERE ...
... который просто объединит данные из двух таблиц в один запрос. Затем вы извлечете данные для обработки с помощью PHP по мере необходимости.
Если вы хотите внедрить такие правила, когда пользователю не может понравиться его или ее собственная публикация, вы должны будете написать это в свой php, чтобы, когда кто-то пытается разместить понравившуюся запись, есть проверка, является ли она его или ее своя. Вы не хотели бы, например, разрешить кому-то лайкать пост, записать подобное в базу данных, а затем, когда страница загружена, проверить с помощью запроса, есть ли у этого человека разрешение на это.