Задать вопрос
@driverx18

Как вывести список непрочитанных постов пользователя?

Есть таблица users
Есть таблица articles
После того, как юзер на сайте перейдет на новость, она автоматически будет как прочитанная. То есть, есть таблица read_articles.
Собственно, структура ее:
id | article_id | user_id

Как мне вывести пользователю с id #2 (допустим) все его непрочитанные статьи? Вот у меня набросок есть один (он выводит те статьи, какие прочитаны):
SELECT articles.id, articles.title, articles.text FROM articles INNER JOIN read_articles ON articles.id = read_articles.article_id WHERE read_articles.user_id = 2;

Я подумал, чтобы вывести статьи какие непрочитаны, надо в том куске кода поставить знак не =, а != (ну то есть так):
SELECT articles.id, articles.title, articles.text FROM articles INNER JOIN read_articles ON articles.id != read_articles.article_id WHERE read_articles.user_id = 2;

Но он выводит вообще все записи по 3-4 раза почему-то
Собственно, вопрос, насколько эффективно то как я сейчас это делаю, и кто может помочь вывести НЕПРОЧИТАННЫЕ статьи? Мне кажется то как у меня сделано совсем неэффективно, неправильно JOINю, и что то в таком роде
  • Вопрос задан
  • 127 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 1
@Artem0071
Безработный mr. Junior
Во втором варианте у вас неправильно соединяются таблицы, поэтому есть проблемы

Есть конструкция NOT IN

Что то в этом роде:
SELECT articles.id, articles.title, articles.text FROM articles WHERE articles.id NOT IN ( SELECT articles.id FROM articles WHERE user_id = some_id )
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
SELECT articles.id, articles.title, articles.text FROM articles WHERE id NOT IN(SELECT article_id  FROM read_articles WHERE user_id = ?)

Ну тип такого
Ответ написан
Ваш ответ на вопрос

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

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