Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/34: Рейтинг темы: голосов - 34, средняя оценка - 5.00
 Аватар для TARAKANhoy
4 / 4 / 2
Регистрация: 28.03.2011
Сообщений: 94

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

28.03.2012, 02:32. Показов 6945. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru