Помогите написать корректный SQL запрос для вывода данных

У меня есть 3 таблицы: users, articles и likes.

Их структуры такие:

  • users: id, ...
  • articles: id, author_id, ...
  • likes: article_id, user_id, liked

Мне нужно написать SQL запрос для получения всех статей определенного author_id с пометкой тех, которые пользователь с id X лайкнул. То есть в ответе должны быть данные о ВСЕХ статьях автора author_id и поле liked которое будет = 1 (если пользователь с id X эту статью лайкнул) и 0 (если не лайкнул).

Я пытался делать так:

SELECT 
  articles.id, articles.title, likes.liked 
FROM articles LEFT JOIN likes ON likes.user_id = X AND likes.article_id = articles.id 
WHERE articles.author_id = Y

но мне выдается ерунда, которая никакого отношения к тому что мне надо не имеет.


Ответы (1 шт):

Автор решения: Alex R.

С помощью подзапроса определяем количество лайков.

SELECT 
  a.id, a.title, 
  (SELECT 
     count(*) 
   FROM likes l 
   WHERE l.user_id = <пользователь_X>
   and   l.article_id = a.id) liked_cnt 
FROM articles a
WHERE a.author_id = <определенный_автор>

<пользователь_X> и <определенный_автор> заменить на требуемые значения.

→ Ссылка