Аватар для TARAKANhoy
4 / 4 / 2
Регистрация: 28.03.2011
Сообщений: 94

Подсчёт количества строк с объединением двух таблиц

28.03.2012, 02:32. Показов 6958. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Например имеем такие таблицы данных:
news
idtitle
1Новость 1
2Новость 2
3Новость 3
4Новость 4
5Новость 5
6Новость 6

comments
idtitledata_iddata_type
1Комментарий 11news
2Комментарий 21news
3Комментарий 31article
4Комментарий 42news
5Комментарий 53news
6Комментарий 63news
7Комментарий 73news
8Комментарий 84news
9Комментарий 95news
10Комментарий 105news

В первой храним новости, во второй комменты. Комментарии для новостей определяются по равным значениям столбца data_id в комментариях и идентификатора id в новостях. Так же задаётся параметр data_type который определяет, что это комментарии именно новостей, а не другого раздела.

Видим, что у нас есть 6 новостей. В таблице с комментариями мы имеем:
  • 1 новость = 2 комментария (специально ввёл значение article в столбец data_type, чтобы в примере было различие между комментариями разного типа данных)
  • 2 новость = 1 коммент
  • 3 новость = 3 коммента
  • 4 новость = 1 коммент
  • 5 новость = 2 коммента
  • 6 новость = 0 комментов

Я задаю такой SQL запрос:
SQL
1
2
3
4
5
SELECT COUNT(*)
FROM `news` n
LEFT JOIN `comments` c
ON c.`data_id`=n.`id`
WHERE c.`data_type`='news'
В итоге такой запрос выводит мне общее количество комметариев: 9
Мне же требуется сгруппировать комментарии одной новости и считать их за одну строчку. Т.е. на выходе я должен получить число строк: 5

Я пока довольно плохо разбираюсь в SQL запросах с выборкой из двух связанных таблиц сразу, поэтому мои эксперименты ни привели ни к чему кроме этого запроса...Прошу вашей помощи.

P.S. запрос вообще изначально формировался из этого:
SQL
1
2
3
4
5
6
7
SELECT n.`id`,n.`title`,COUNT(*) AS  "com"
FROM `comments` c
LEFT JOIN `news` n
ON c.`data_id`=n.`id`
WHERE c.`data_type`='news'
GROUP BY c.`data_id`,n.`title`
ORDER BY `com` DESC
Который мне тоже был подсказан на вашем форуме. Думал получится из него модифицировать в то что мне требуется, но увы...
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.03.2012, 02:32
Ответы с готовыми решениями:

Запрос. Подсчет количества из двух таблиц
суть задачи такова: Есть 2 таблицы Рабочие и Предприятия. Необходимо подсчитать сколько рабочих трудиться на каждом предприятии. данные...

Запрос с объединением двух таблиц
Подскажите где я допустил ошибку? Я вывожу одно поле из таблицы вот таким образом: SELECT DateTime FROM Automatlog WHERE DateTime...

Запрос с объединением данных из двух таблиц
Имеем таблицу ОСНОВНАЯ id|Наименование|Параметр 1|Арбуз|большой 2|Капуста|белокочанная 3|Салат|вкусный id - число, ...

4
 Аватар для Vovan-VE
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
28.03.2012, 18:34
SQL
1
2
3
4
5
SELECT `n`.*, IFNULL(COUNT(`c`.`id`), 0) AS `comments_count`
FROM `news` AS `n`
  LEFT JOIN `comments` AS `c`
    ON `n`.`id` = `c`.`data_id` AND `c`.`data_type` = 'news'
GROUP BY `n`.`id`
1
 Аватар для TARAKANhoy
4 / 4 / 2
Регистрация: 28.03.2011
Сообщений: 94
28.03.2012, 20:00  [ТС]
Цитата Сообщение от Vovan-VE Посмотреть сообщение
SQL
1
2
3
4
5
SELECT `n`.*, IFNULL(COUNT(`c`.`id`), 0) AS `comments_count`
FROM `news` AS `n`
  LEFT JOIN `comments` AS `c`
    ON `n`.`id` = `c`.`data_id` AND `c`.`data_type` = 'news'
GROUP BY `n`.`id`
Запрос вывел все новости (включая и те в которых значение комментариев = 0). Т.е. получилась такая таблица:
idtitlecomments_count
1Новость 12
2Новость 21
3Новость 33
4Новость 41
5Новость 52
6Новость 60
Это не то что мне нужно, во первых новости без комментариев не должны учитываться во вторых на выходе я должен получить количество новостей у которых есть комментарии, а именно таблицу вида:
count_news_with_com
5

В PHP следующий код:
PHP
1
2
3
4
5
6
7
$result_count = mysql_query("SELECT `n`.*, IFNULL(COUNT(`c`.`id`), 0) AS `comments_count`
FROM `news` AS `n`
LEFT JOIN `comments` AS `c`
ON `n`.`id` = `c`.`data_id` AND `c`.`data_type` = 'news'
GROUP BY `n`.`id`");
$myrow_count = mysql_fetch_array($result_count);
echo $myrow_count[0];
Выводит мне результат "1", по всей видимости идентификатор первой новости. Мне же в результате в PHP нужно получиться всё ту же "5", т.е. количество новостей которые имеют комментарии.
0
 Аватар для Vovan-VE
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
29.03.2012, 19:11
Цитата Сообщение от TARAKANhoy Посмотреть сообщение
Это не то что мне нужно, во первых новости без комментариев не должны учитываться
LEFT JOIN исправляем на INNER JOIN.
Цитата Сообщение от TARAKANhoy Посмотреть сообщение
во вторых на выходе я должен получить количество новостей у которых есть комментарии
COUNT(DISTINCT ...) - количество различных не-NULL значений.
SQL
1
2
3
4
SELECT COUNT(DISTINCT `n`.`id`) AS `count_news_with_com`
FROM `news` AS `n`
  INNER JOIN `comments` AS `c`
    ON `n`.`id` = `c`.`data_id` AND `c`.`data_type` = 'news'
1
 Аватар для TARAKANhoy
4 / 4 / 2
Регистрация: 28.03.2011
Сообщений: 94
01.04.2012, 20:34  [ТС]
Цитата Сообщение от Vovan-VE Посмотреть сообщение
LEFT JOIN исправляем на INNER JOIN.

COUNT(DISTINCT ...) - количество различных не-NULL значений.
SQL
1
2
3
4
SELECT COUNT(DISTINCT `n`.`id`) AS `count_news_with_com`
FROM `news` AS `n`
  INNER JOIN `comments` AS `c`
    ON `n`.`id` = `c`.`data_id` AND `c`.`data_type` = 'news'
То что нужно! Спасибо)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
01.04.2012, 20:34
Помогаю со студенческими работами здесь

Выгрузка данных в Excel (добавление нужного количества строк с объединением ячеек)
Добрый день! Пару дне уже бьюсь не могу найти решения. Подскажите ребята. Нужное количество данных нужно выгрузить в шаблон Excel. Выгрузка...

Подсчёт количества символов и количества строк в файле
Нужно написать программу, которая запрашивает у пользователя имя (адрес) текстового файла, далее открывает его и считает в нем количество...

Подсчет количества записей из 2х таблиц
Добрый день. Прошу помочь в составлении запроса. Есть 2 таблице. В 1-й перечень пользователей: 'ФИО1', 'ФИО2', 'ФИО3',...

Подсчет количества записей из несвязанных таблиц и вывод результата в удобном виде
Подскажите пожалуйста для нивичка в создании БД, можно ли (вернее это по-любому можно, но как это быстрее всего) в Access делать подсчет...

Подсчет количества строк
Здравствуйте, у меня вопрос. Как подсчитать количество строк в textBox?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

Новые блоги и статьи
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru