|
|
|
Прошу помощи с запросом
|
|||
|---|---|---|---|
|
#18+
Добрый день. Есть запрос: Код: sql 1. 2. 3. Получаем список компаний из таблицы companies и количество домов по каждой компании из таблицы houses. Надо получить еще и количество квартир по каждому дому из таблицы apartments, где apartments.house_id = houses.house_id. Не могу понять куда это прилепить. Подскажите пожалуйста) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2014, 17:26:24 |
|
||
|
Прошу помощи с запросом
|
|||
|---|---|---|---|
|
#18+
Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. PS. это очень неэффективный запрос с точки зрения зрения скорости работы и потребления ресурсов если он выполняется редко, то ок если часто, то придется дорабатывать структуру ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2014, 17:41:08 |
|
||
|
Прошу помощи с запросом
|
|||
|---|---|---|---|
|
#18+
Спасибо) Можно подробнее если есть возможность ? Почему не эффективен и что со структурой ? Просто заказчик сначала одно хотел, потом дорисовать дома, потом квартиры, потом боюсь будут жильцы, потомки жильцов и т.д. ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2014, 17:47:21 |
|
||
|
Прошу помощи с запросом
|
|||
|---|---|---|---|
|
#18+
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) тоесть мускл сначала получит таблицу сумм - сумму для каждой компании, а потом для таблицы компаний дорисует столбик проставив соответсвующие суммы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2014, 18:09:57 |
|
||
|
Прошу помощи с запросом
|
|||
|---|---|---|---|
|
#18+
JakeBadlandСпасибо) Можно подробнее если есть возможность ? Почему не эффективен и что со структурой ? Просто заказчик сначала одно хотел, потом дорисовать дома, потом квартиры, потом боюсь будут жильцы, потомки жильцов и т.д. ... другой вариант, если и это будет медленно, можно посмотреть вообще в сторону преагрегации таблица компаний уже содержит число домов и квартир. на таблицах квартиры и дома висят тригеры на вставку удаление изменение, которые автоматически коректируют нужную сумму в таблице компнаий в этом случае - будет просто выборка из одной таблицы, где все суммы уже пощитаны ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2014, 18:11:45 |
|
||
|
Прошу помощи с запросом
|
|||
|---|---|---|---|
|
#18+
JakeBadlandСпасибо) Можно подробнее если есть возможность ? Почему не эффективен и что со структурой ? Просто заказчик сначала одно хотел, потом дорисовать дома, потом квартиры, потом боюсь будут жильцы, потомки жильцов и т.д. ... делайте пока так, когда упретесь в вопросы производительности, тогда приходите, обсудим может оно вам и не понадобится... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2014, 18:50:33 |
|
||
|
Прошу помощи с запросом
|
|||
|---|---|---|---|
|
#18+
Хм.. в смысле, примерно тоже, что если бы я получил список домов и потом в цикле наделал запросов. Так получается ? Спасибо, в принципе понятно, надо поэксперементировать ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.09.2014, 19:45:22 |
|
||
|
Прошу помощи с запросом
|
|||
|---|---|---|---|
|
#18+
JakeBadland, кстати, запрос выдаёт общее кол-во квартир по всем домам компании если вы хотите по каждому дому отдельно, то показывайте, как должен выглядеть результат ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2014, 07:13:32 |
|
||
|
Прошу помощи с запросом
|
|||
|---|---|---|---|
|
#18+
JakeBadlandХм.. в смысле, примерно тоже, что если бы я получил список домов и потом в цикле наделал запросов. Так получается ? Спасибо, в принципе понятно, надо поэксперементировать ) стоит обратить внимание на... допустим домов милион, компаний 1000. в твоём случае, для каждой из 1000 компаний, и перечитываем весь милион домов и отбирает дома нужной компании. в другом случае мы один раз перечитываем милион домов, подщитав 1000 сум, потом имея два списка - список компаний, и список сум домов для компаний формируем один. вторая задача требует меньше телодвижений. ЗЫ полный аналог, разбить толпу людей на корпоративе по командам - в команде люди только одного отдела. можно всем сказать - отдел А становитесь около столика первого, отдел Б около второго...итд а можно для 10 отделов 10 раз оббежать всю толпу, спрашивая из какого он отдела и беря за руку вести к нужному столику. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2014, 11:58:14 |
|
||
|
Прошу помощи с запросом
|
|||
|---|---|---|---|
|
#18+
tanglirJakeBadland, кстати, запрос выдаёт общее кол-во квартир по всем домам компании если вы хотите по каждому дому отдельно, то показывайте, как должен выглядеть результат Нет, все правильно, общее количество для каждой компании. 2 alex564657498765453 : К счастью компаний будет пару десятков. А пример про сотрудников супер) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2014, 15:36:55 |
|
||
|
|

start [/forum/topic.php?fid=47&fpage=163&tid=1834247]: |
0ms |
get settings: |
8ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
25ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
| others: | 200ms |
| total: | 316ms |

| 0 / 0 |
