Часть вашей проблемы с запросом состоит в том, что в запросах SQL есть зарезервированные ключевые слова, LIKE - это одно из них, а также SELECT, VALUE, WHERE IN, ON IF.
Полный список зарезервированных слов
Когда имя столбца или ссылка конфликтуют с зарезервированным словом, вы должны заключить его в острый акцент (`), чтобы оно не анализировалось как условие.
`- Острая, обратная кавычка, могила, серьезный акцент, левая цитата, открытая цитата или толчок
SELECT post.id,post.author,post.title,post.body,post.image,post.created_date
FROM posts post, likes `like`
WHERE `like`.user_id = :user_id;
Лично я всегда заключаю все свои столбцы и ссылки, чтобы быть уверенным, и использую полные подробные запросы:
SELECT `post`.`id`, `post`.`author`, `post`.`title`, `post`.`body`, `post`.`image`, `post`.`created_date`
FROM `posts` AS `post`, `likes` AS `like`
WHERE `like`.`user_id` = :user_id;
Чтобы ваш запрос работал, вы должны использовать LEFT JOIN
на likes
. Левое соединение гарантирует, что вы получите свои данные поста, даже если нет похожих записей для выбора, Вы должны получить лайки для поста и где сообщение совпадает с идентификатором пользователя.
SELECT `post`.`id`, `post`.`author`, `post`.`title`, `post`.`body`, `post`.`image`, `post`.`created_date`
FROM `posts` AS `post`
LEFT JOIN `likes` AS `like` ON `like`.`post_id` = `post`.`id`
WHERE `post`.`user_id` = :user_id;