powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Прошу помощи с запросом
10 сообщений из 10, страница 1 из 1
Прошу помощи с запросом
    #38742049
JakeBadland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Есть запрос:
Код: sql
1.
2.
3.
SELECT company_id, company_name, contract_num, date,
   		(SELECT COUNT(*) FROM houses WHERE houses.company_id=companies.company_id) AS housesCount
			FROM companies


Получаем список компаний из таблицы companies и количество домов по каждой компании из таблицы houses.
Надо получить еще и количество квартир по каждому дому из таблицы apartments, где apartments.house_id = houses.house_id. Не могу понять куда это прилепить.
Подскажите пожалуйста)
...
Рейтинг: 0 / 0
Прошу помощи с запросом
    #38742058
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SELECT 
    company_id
    , company_name
    , contract_num
    , date
    , (SELECT COUNT(*) FROM houses hs WHERE hs.company_id = c.company_id) AS housesCount

    , (SELECT COUNT(*) FROM appartments a WHERE a.house_id in 
          (SELECT house_id FROM houses h WHERE h.company_id = c.company_id)) 

        AS apparmentsCount

FROM companies c



PS. это очень неэффективный запрос с точки зрения зрения скорости работы и потребления ресурсов
если он выполняется редко, то ок
если часто, то придется дорабатывать структуру
...
Рейтинг: 0 / 0
Прошу помощи с запросом
    #38742064
JakeBadland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо)

Можно подробнее если есть возможность ? Почему не эффективен и что со структурой ?
Просто заказчик сначала одно хотел, потом дорисовать дома, потом квартиры, потом боюсь будут жильцы, потомки жильцов и т.д. ...
...
Рейтинг: 0 / 0
Прошу помощи с запросом
    #38742084
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JakeBadlandСпасибо)

Можно подробнее если есть возможность ? Почему не эффективен и что со структурой ?
Просто заказчик сначала одно хотел, потом дорисовать дома, потом квартиры, потом боюсь будут жильцы, потомки жильцов и т.д. ...

смотри.
твой запрос, єто то что называеться корелированный подзапрос. он выполняеться отедльно для каждой строки основного запроса.(е не буду зуб давать, может мускл както и оптимизирует)

НО в целом

select t.*,(select need_value from other_table o where o.id = t.id) from table t WHERE <cond>...

будет обработано
1)читаем тейбл(псевдоним Т)
2)<cond> по этим условиям делаем просев таблицы.
3)получаем скажем 1000 строчек
4)для каждой строчки выполниться
(select need_value from other_table o where o.id = t.id)

понимаешь?!

данный запрос скорей всего быстрее отработает в виде

select t.*,o.need_value
from table t join other_table o on (o.id = t.id)
where <cond>

в твоём случае, навскидку приходит в голову

other table = select company_id,count(*) as 'total' from houses group by compay_id

и тогда

select c.*,o.total
from companys c join
(
select company_id,count(*) as 'total' from houses group by compay_id
) o
on (o.company_id = c.company_id)

тоесть мускл сначала получит таблицу сумм - сумму для каждой компании, а потом
для таблицы компаний дорисует столбик проставив соответсвующие суммы.
...
Рейтинг: 0 / 0
Прошу помощи с запросом
    #38742085
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JakeBadlandСпасибо)

Можно подробнее если есть возможность ? Почему не эффективен и что со структурой ?
Просто заказчик сначала одно хотел, потом дорисовать дома, потом квартиры, потом боюсь будут жильцы, потомки жильцов и т.д. ...

другой вариант, если и это будет медленно, можно посмотреть вообще в сторону преагрегации
таблица компаний уже содержит число домов и квартир.

на таблицах квартиры и дома висят тригеры на вставку удаление изменение, которые автоматически коректируют нужную сумму в таблице компнаий

в этом случае - будет просто выборка из одной таблицы, где все суммы уже пощитаны
...
Рейтинг: 0 / 0
Прошу помощи с запросом
    #38742114
Фотография Lumix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JakeBadlandСпасибо)

Можно подробнее если есть возможность ? Почему не эффективен и что со структурой ?
Просто заказчик сначала одно хотел, потом дорисовать дома, потом квартиры, потом боюсь будут жильцы, потомки жильцов и т.д. ...

делайте пока так, когда упретесь в вопросы производительности, тогда приходите, обсудим
может оно вам и не понадобится...
...
Рейтинг: 0 / 0
Прошу помощи с запросом
    #38742163
JakeBadland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хм.. в смысле, примерно тоже, что если бы я получил список домов и потом в цикле наделал запросов. Так получается ?

Спасибо, в принципе понятно, надо поэксперементировать )
...
Рейтинг: 0 / 0
Прошу помощи с запросом
    #38742394
tanglir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JakeBadland,

кстати, запрос выдаёт общее кол-во квартир по всем домам компании
если вы хотите по каждому дому отдельно, то показывайте, как должен выглядеть результат
...
Рейтинг: 0 / 0
Прошу помощи с запросом
    #38742660
alex564657498765453
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JakeBadlandХм.. в смысле, примерно тоже, что если бы я получил список домов и потом в цикле наделал запросов. Так получается ?

Спасибо, в принципе понятно, надо поэксперементировать )

стоит обратить внимание на...

допустим домов милион, компаний 1000.

в твоём случае, для каждой из 1000 компаний, и перечитываем весь милион домов и отбирает дома нужной компании.

в другом случае
мы один раз перечитываем милион домов, подщитав 1000 сум, потом

имея два списка - список компаний, и список сум домов для компаний формируем один.

вторая задача требует меньше телодвижений.

ЗЫ
полный аналог, разбить толпу людей на корпоративе по командам - в команде люди только одного отдела.

можно всем сказать - отдел А становитесь около столика первого, отдел Б около второго...итд

а можно для 10 отделов 10 раз оббежать всю толпу, спрашивая из какого он отдела и беря за руку вести к нужному столику.
...
Рейтинг: 0 / 0
Прошу помощи с запросом
    #38743152
JakeBadland
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
tanglirJakeBadland,
кстати, запрос выдаёт общее кол-во квартир по всем домам компании
если вы хотите по каждому дому отдельно, то показывайте, как должен выглядеть результат

Нет, все правильно, общее количество для каждой компании.

2 alex564657498765453 :
К счастью компаний будет пару десятков.
А пример про сотрудников супер)
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Прошу помощи с запросом
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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