Гость
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Множественная выборка с подсчетом и DISTINCT / 8 сообщений из 8, страница 1 из 1
19.01.2017, 19:15
    #39387918
bukreevlad
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Множественная выборка с подсчетом и DISTINCT
Добрый вечер!

Есть таблица cо строками (все лишние столбцы и прочее убрал):

Код: php
1.
2.
3.
4.
5.
6.
7.
consultant => 000010, read => 0
consultant => 000010, read => 0
consultant => 000010, read => 0
consultant => 000010, read => 1
consultant => 000011, read => 1
consultant => 000019, read => 0
consultant => 000034, read => 1



Как получить все уникальные: consultant я знаю.
Код: sql
1.
$query = $dbh->query("SELECT DISTINCT consultant FROM Messages;");



А как подсчитать их количество и получить все уникальные consultant с read = 0 ?
Нужно получить ответ от запроса:

Код: php
1.
2.
consultant => 000010 (3)
consultant => 000019 (1)



Что бы через foreach прогнать полученные данные и получить массив в виде:

Код: php
1.
2.
000010 => 3
000019 => 1



Код: php
1.
2.
3.
4.
5.
6.
$consultant = $query->fetchAll();					
if (count($consultant) > 0) {
    foreach ($consultant as $row) {
        ... тут я тоже напишу код
    }
}



Проект остановился на 2466 строке, дальше не могу из за этого.
...
Рейтинг: 0 / 0
19.01.2017, 19:24
    #39387922
bukreevlad
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Множественная выборка с подсчетом и DISTINCT
Немного подправлю..
Как получить все уникальные: consultant с read = 0 я знаю.
Код: sql
1.
$query = $dbh->query("SELECT DISTINCT consultant FROM Messages WHERE read = '0';");
...
Рейтинг: 0 / 0
19.01.2017, 19:36
    #39387929
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Множественная выборка с подсчетом и DISTINCT
Читай букварь про конструкцию GROUP BY и агрегирующие функции.
...
Рейтинг: 0 / 0
19.01.2017, 19:41
    #39387933
bukreevlad
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Множественная выборка с подсчетом и DISTINCT
White Owl,

Ох.. как это тяжко )) ладно.. попробую что-то найти.. Спасибо за подсказку!
Просто, может хоть какой-то малый код запроса в одну строчку привести сможешь ? А я от него оттолкнусь ?
...
Рейтинг: 0 / 0
19.01.2017, 19:47
    #39387935
bukreevlad
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Множественная выборка с подсчетом и DISTINCT
White Owl,

Как правило, использовать параметр DISTINCT с агрегирующими функциями не име­ет смысла, поскольку при подсчете обобщенных данных обычно приходится учиты­вать все записи, а не только уникальные.

Источник
...
Рейтинг: 0 / 0
20.01.2017, 18:41
    #39388657
bukreevlad
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Множественная выборка с подсчетом и DISTINCT
White Owl, Я целый день смотрел и изучал:

Примерная таблица:
Код: php
1.
2.
3.
4.
5.
6.
7.
consultant => 000010, read => 0
consultant => 000010, read => 0
consultant => 000010, read => 0
consultant => 000010, read => 1
consultant => 000011, read => 1
consultant => 000019, read => 0
consultant => 000034, read => 1



Данный запрос выводит то, что мне нужно! Он считает общее количество каждого consultant и выводит их количество с параметром read=0 ,

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
SELECT T1.consultant, T1.count, T2.unread
FROM
  (SELECT consultant, COUNT(consultant) AS count
   FROM Messages GROUP BY consultant) T1,
   
  (SELECT consultant, COUNT(consultant) AS unread
   FROM Messages WHERE read = '0' GROUP BY consultant) T2
WHERE T1.consultant = T2.consultant;



Получил ответ:
Код: php
1.
2.
consultant => 000010, count => 4, unread => 3
consultant => 000019, count => 1, unread => 1



Но подправь меня, он не выводит все consultant , то-есть, те которые с read=1 не выводит.. помоги.. 300р на телефон брошу!

Ответ должен быть такой:
Код: php
1.
2.
3.
4.
consultant => 000010, count => 4, unread => 3
consultant => 000011, count => 1, unread => 0
consultant => 000019, count => 1, unread => 1
consultant => 000034, count => 1, unread => 0
...
Рейтинг: 0 / 0
20.01.2017, 21:40
    #39388749
bukreevlad
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Множественная выборка с подсчетом и DISTINCT
Решение найдено!

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT 
    T1.consultant, count(T1.consultant) AS count, T2.unread
FROM 
    Messages T1
LEFT JOIN 
    (SELECT consultant, count(*) AS unread  FROM Messages WHERE read = '0' GROUP BY consultant) T2
ON 
    T1.consultant = T2.consultant
GROUP BY 
    T1.consultant
...
Рейтинг: 0 / 0
20.01.2017, 21:47
    #39388752
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Множественная выборка с подсчетом и DISTINCT
Прочитай это: http://www.sql.ru/forum/983207/kak-prosit-pomoshhi-s-zaprosom
Там-же есть ссылка на букварь который надо читать, а не странные странички с вырви-глазным дизайном.
...
Рейтинг: 0 / 0
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Множественная выборка с подсчетом и DISTINCT / 8 сообщений из 8, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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