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

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

Есть таблица сообщений 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
select f1, f2, (select count(f1) from t2), (select count(f1) from t3) from t1
    #39787524
Фотография 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 


?
...
Рейтинг: 0 / 0
select f1, f2, (select count(f1) from t2), (select count(f1) from t3) from t1
    #39787525
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НУ и 1) посмотри условия связывания - у тебя нет алиасов таблица 2) если есть "пустые" ссылки - перепиши на LEFT JOIN.
...
Рейтинг: 0 / 0
select f1, f2, (select count(f1) from t2), (select count(f1) from t3) from t1
    #39787725
savsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
select f1, f2, (select count(f1) from t2), (select count(f1) from t3) from t1
    #39787816
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какой смысл спрашивать то, что элементарно проверяется?
savsoftА DISTINCT обязательно?Попробуйте с ним и без него... если не смогли разобраться в логике этого запроса.
savsoftА мой первоначальный запрос просто неэффективный или он с ошибкой?Запрос выполняется или приводит к ошибке? результат правильный или нет?
...
Рейтинг: 0 / 0
select f1, f2, (select count(f1) from t2), (select count(f1) from t3) from t1
    #39788723
savsoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AkinaКакой смысл спрашивать то, что элементарно проверяется?
savsoftА DISTINCT обязательно?Попробуйте с ним и без него... если не смогли разобраться в логике этого запроса.

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

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


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