Гость
Форумы / MySQL [игнор отключен] [закрыт для гостей] / select f1, f2, (select count(f1) from t2), (select count(f1) from t3) from t1 / 7 сообщений из 7, страница 1 из 1
18.03.2019, 00:02
    #39787485
savsoft
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
select f1, f2, (select count(f1) from t2), (select count(f1) from t3) from t1
Всем привет.

Есть работающая программа, нужно расширить функционал.

Есть таблица сообщений messages, кратко

mes_id
mes_text
...

Таблица получателей recipients, кратко
rcp_id
rcp_mes_id = mes_id
...

И таблица комментариев comments, кратко

cmt_id
cmt_rcp_id = rcp_id
...

Сделал запрос

Код: sql
1.
2.
3.
4.
SELECT mes_id, mes_text,
(SELECT COUNT(rcp_id) FROM recipientы WHERE rcp_mes_id = mes_id) AS Cnt,
(SELECT COUNT(cmt_id) FROM comments WHERE cmt_rcp_id IN (SELECT rcp_id FROM recipients WHERE rcp_mes_id = mes_id)) AS ChtCnt
FROM messages;



Вроде работает, но может есть какой более эффективный путь? Есть ли подводные камни в таком запросе?
...
Рейтинг: 0 / 0
18.03.2019, 07:59
    #39787524
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
select f1, f2, (select count(f1) from t2), (select count(f1) from t3) from t1
Код: sql
1.
2.
3.
4.
SELECT m.mes_id, m.mes_text, COUNT(DISTINCT r.rcp_id), COUNT(DISTINCT c.cmt_id)
FROM messages m, recipients r, comments c
WHERE r.rcp_mes_id = m.mes_id
  AND c.cmt_rcp_id = r.rcp_id 


?
...
Рейтинг: 0 / 0
18.03.2019, 08:00
    #39787525
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
select f1, f2, (select count(f1) from t2), (select count(f1) from t3) from t1
НУ и 1) посмотри условия связывания - у тебя нет алиасов таблица 2) если есть "пустые" ссылки - перепиши на LEFT JOIN.
...
Рейтинг: 0 / 0
18.03.2019, 13:11
    #39787725
savsoft
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
select f1, f2, (select count(f1) from t2), (select count(f1) from t3) from t1
Akina
Код: sql
1.
2.
3.
4.
SELECT m.mes_id, m.mes_text, COUNT(DISTINCT r.rcp_id), COUNT(DISTINCT c.cmt_id)
FROM messages m, recipients r, comments c
WHERE r.rcp_mes_id = m.mes_id
  AND c.cmt_rcp_id = r.rcp_id 


?

А DISTINCT обязательно? r.rcp_id, c.cmt_id - уникальные, пустых значений нет. Или есть строка полностью заполненная или ее вообще нет.

А мой первоначальный запрос просто неэффективный или он с ошибкой?
...
Рейтинг: 0 / 0
18.03.2019, 14:45
    #39787816
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
select f1, f2, (select count(f1) from t2), (select count(f1) from t3) from t1
Какой смысл спрашивать то, что элементарно проверяется?
savsoftА DISTINCT обязательно?Попробуйте с ним и без него... если не смогли разобраться в логике этого запроса.
savsoftА мой первоначальный запрос просто неэффективный или он с ошибкой?Запрос выполняется или приводит к ошибке? результат правильный или нет?
...
Рейтинг: 0 / 0
20.03.2019, 01:49
    #39788723
savsoft
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
select f1, f2, (select count(f1) from t2), (select count(f1) from t3) from t1
AkinaКакой смысл спрашивать то, что элементарно проверяется?
savsoftА DISTINCT обязательно?Попробуйте с ним и без него... если не смогли разобраться в логике этого запроса.

Результат одинаковый, но выводится только одна строка для сообщения с mes_id = 1
...
Рейтинг: 0 / 0
20.03.2019, 08:08
    #39788763
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
select f1, f2, (select count(f1) from t2), (select count(f1) from t3) from t1
savsoftвыводится только одна строка для сообщения с mes_id = 1Небось нет каких-то референтов? какие-то COUNT должны быть нулями? перепишите на LEFT JOIN, делов-то...

PS. DISTINCT - обязателен.
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / select f1, f2, (select count(f1) from t2), (select count(f1) from t3) from t1 / 7 сообщений из 7, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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