powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите составить запрос (количество непрочитанных новостей)
8 сообщений из 8, страница 1 из 1
Помогите составить запрос (количество непрочитанных новостей)
    #38703317
Добрый день.
Помогите пожалуйста с составлением правильного запроса.
Нужно показать каждому пользователю количество непрочитанных уведомлений (новостей)

Таблица с новостями NEWS имеет поля:
ID - идентификатор новости
NEWS_TEXT - текст новости
Данные выглядят примерно так:
Код: html
1.
2.
3.
4.
5.
6.
7.
+---+-----------------------+
|  1|Новость номер один     |
+---+-----------------------+
|  2|Еще одна новость       |
+---+-----------------------+
|  3|Последняя новость      |
+---+-----------------------+



Таблица с отметками о прочтении NEWS_READ имеет поля:
NEWS_ID - идентификатор прочитанной новости
USER_ID - идентификатор пользователя, прочитавшего новость
Данные выглядят примерно так:
Код: html
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
+---+---+
|  1|  1|
+---+---+
|  1|  2|
+---+---+
|  1|  3|
+---+---+
|  2|  1|
+---+---+
|  2|  3|
+---+---+



В итоге хотелось бы получить количество непрочитанных новостей по указанному пользователю.
...
Рейтинг: 0 / 0
Помогите составить запрос (количество непрочитанных новостей)
    #38703443
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Денис Бондарь,

left join + count(news_id is null)
...
Рейтинг: 0 / 0
Помогите составить запрос (количество непрочитанных новостей)
    #38703967
tanglir,

Почему-то все равно получаю сумму прочитанных новостей.

Код: sql
1.
2.
3.
4.
5.
6.
SELECT
  COUNT(news_read.news_id IS NULL) AS notread
FROM news
  LEFT OUTER JOIN news_read
    ON news.id = news_read.news_id
WHERE news_read.user_id = 2



На выходе должны получить notread = по идее 1, а получаем = 2 (т.е. сумму прочитанных, вместо непрочитанных)

Пробовал без COUNT выводить все значения news_id - выводятся только 1 и 3 без null
...
Рейтинг: 0 / 0
Помогите составить запрос (количество непрочитанных новостей)
    #38703978
Cygapb-007
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Денис Бондарь,
замените count на sum - все и получится :)
...
Рейтинг: 0 / 0
Помогите составить запрос (количество непрочитанных новостей)
    #38703985
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И условие news_read.user_id = 2 нужно перенести в условия соединения.
...
Рейтинг: 0 / 0
Помогите составить запрос (количество непрочитанных новостей)
    #38703997
tanglir, Cygapb-007, miksoft,

Большое человеческое спасибо! Заработало как нужно!

Код: sql
1.
2.
3.
4.
5.
6.
SELECT
  SUM(news_read.news_id IS NULL) AS notread
FROM news
  LEFT OUTER JOIN news_read
    ON news.id = news_read.news_id
    AND news_read.user_id = 2
...
Рейтинг: 0 / 0
Помогите составить запрос (количество непрочитанных новостей)
    #38703999
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуйте так, вдруг быстрее окажется.
Код: sql
1.
2.
3.
4.
5.
6.
7.
SELECT
  COUNT(*) AS notread
FROM news
  LEFT OUTER JOIN news_read
    ON news.id = news_read.news_id
    AND news_read.user_id = 2
WHERE news_read.news_id IS NULL
...
Рейтинг: 0 / 0
Помогите составить запрос (количество непрочитанных новостей)
    #38704018
miksoft,

Большое спасибо. К сожалению, проверить скорость не получается, т.к. данных в таблицах крайне мало. Спустя время попробую проверить скорость выборки.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите составить запрос (количество непрочитанных новостей)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]