Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите составить запрос (количество непрочитанных новостей) / 8 сообщений из 8, страница 1 из 1
22.07.2014, 21:00:59
    #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
23.07.2014, 04:58:07
    #38703443
tanglir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос (количество непрочитанных новостей)
Денис Бондарь,

left join + count(news_id is null)
...
Рейтинг: 0 / 0
23.07.2014, 14:50:28
    #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
23.07.2014, 14:55:35
    #38703978
Cygapb-007
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос (количество непрочитанных новостей)
Денис Бондарь,
замените count на sum - все и получится :)
...
Рейтинг: 0 / 0
23.07.2014, 15:01:48
    #38703985
miksoft
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите составить запрос (количество непрочитанных новостей)
И условие news_read.user_id = 2 нужно перенести в условия соединения.
...
Рейтинг: 0 / 0
23.07.2014, 15:07:20
    #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
23.07.2014, 15:09:24
    #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
23.07.2014, 15:24:42
    #38704018
Помогите составить запрос (количество непрочитанных новостей)
miksoft,

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


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