@SET1

Как правильно составить такой 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


но мне выдается ерунда, которая никакого отношения к тому что мне надо не имеет.
  • Вопрос задан
  • 82 просмотра
Решения вопроса 1
@SET1 Автор вопроса
Ответ дали на стаковерфлоу.
Решение:

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 = <определнный_автор>
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
SELECT `a`.*, `l`.`article_id` IS NOT NULL
  FROM `articles` AS `a`
  LEFT JOIN `likes` AS `l`
    ON `l`.`article_id` = `a`.`id` AND `l`.`user_id` = :userId
  WHERE `a`.`author_id` = :authorId
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы