powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите уйти от вложенного запроса.
19 сообщений из 19, страница 1 из 1
Помогите уйти от вложенного запроса.
    #33430776
bzzz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема ... написана функция ... написал с использованием вложенного запроса ... бац а на хостинге - 4.0.25 ... нужно избавиться от вложенного запроса. Сам, что - то никак не могу совладать ... помогите.

Нужно получить эквивалент запросу

select поля, (select count(*) from tbl3 as e where e.field=a.ID) as count from tbl1 as a, tbl2 as b where a.GroupID = b.ID order by

это сильно упрощенная версия, сам запрос гораздо сложнее о дело в том - что желательно не потерять функционал выборки одним запросом. Не хочу плодить запросы, да и если перейти на несколько запросов - то их будет оч. много.
...
Рейтинг: 0 / 0
Помогите уйти от вложенного запроса.
    #33430872
Marat_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
select поля, count(e.id) as count 
from tbl1 as a, 
      tbl2 as b 
      tbl3 as e
where a.GroupID = b.ID
         e.field=a.ID 
order by ??

Вроде так. Если в tbl1 будут записи, которые могут не иметь соответствия в tbl3 , то надо делать LEFT JOIN .

Однако, если таких случаев много - лучше поломать стиль программирования.

Жизнь коротка - потерпи немного :)
...
Рейтинг: 0 / 0
Помогите уйти от вложенного запроса.
    #33430888
black zorro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну может как точка отсчета будет след. идея делать все таки придется через два запроса ну примерно так
1.
select field, count(1) as count_of from e
результат выборки оформить как строку для второго запроса

2.
select все как было ранее,
CASE a.ID WHEN field_value_1 THEN count_of_1 .... END
все как было ранее
хотя имхо это маразм проще было бы сделать доп цикл на чем вы там пишите и внем сделать еще один запрос на подсчет количества.
...
Рейтинг: 0 / 0
Помогите уйти от вложенного запроса.
    #33430895
bzzz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Marat_L спасибо ... Я вот щас как раз с join и копаюсь ... таким простым запросом не отделаешся ... Соответствие Tbl3 Tbl1 - есть, но в count () должны попадать строки с определенным условием (Я так понимаю это только join'ом можно заменить) ... и этих count() будет минимум 4 штуки с разными условиями ... сорри, что сразу так не написал
...
Рейтинг: 0 / 0
Помогите уйти от вложенного запроса.
    #33430900
bzzz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
black zorro ... на несколько запросов переходить совсем не хочу ... т.к. их будет оч. много ... большая нагрузка слишком ... все нада одним запросом получить ... такие циклы гонять - неправильно
...
Рейтинг: 0 / 0
Помогите уйти от вложенного запроса.
    #33430990
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
select поля, count(distinct e.id) as count1 from tbl1 as a, tbl2 as b, tbl3 as e
 where e.field=a.ID and a.GroupID = b.ID group by поля order by ещё поля;
------------------
- А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm
...
Рейтинг: 0 / 0
Помогите уйти от вложенного запроса.
    #33431029
Marat_L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Bzzz... и этих count() будет минимум 4 штуки с разными условиями ... сорри, что сразу так не написал
Когда много таблиц в Joine, и когда они потенциально могут иметь неограниченный размер - будут проблемы со скоростью.

Лучше вычисли заранее.

Жизнь коротка - потерпи немного :)
...
Рейтинг: 0 / 0
Помогите уйти от вложенного запроса.
    #33431095
bzzz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Marat_L ... да ужж ... Мне что - то скорость joina совсем не нравиться ... с join'ом на один селект count() (участвует 3 таблицы) - думает под минуту ... это неприемлемо ... а что будет с 4-мя даже смотреть не хочу ... как раз таблица с которой идет селект - растет и уже немаленькая ...

а на вложенных селектах - выборка занимает секунды ... В общем щас начинаю придумывать велосипед .. и пытатться решить вопрос и без вложенных селектов и без join'ов ...

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

ЗЫ в схему данных не вникал, поэтому применимость в данном случае не гарантирую.

----

SAnalis.ru - Just for fun. Еще расту, а так я ДЖИП!
...
Рейтинг: 0 / 0
Помогите уйти от вложенного запроса.
    #33431394
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BzzzПока думаю как это дело оптисизировать получше ... так что готов выслушивать варианты.сколько угодно http://dev.mysql.com/doc/refman/4.1/en/optimization.html
...
Рейтинг: 0 / 0
Помогите уйти от вложенного запроса.
    #33431402
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если с полпинка придумать, то нужны правильные индексы на каждое условие в джоине, на каждое условие в where и один большой правильный индекс для order by
------------------
- А как в Интеpнете pаботать? - Сначала нужно узнать, что вам нужно rtfm
...
Рейтинг: 0 / 0
Помогите уйти от вложенного запроса.
    #33431562
bzzz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VoDA ... Да ... Я щас думаю куда - то в эту сторону ... получатся эти Count()'ты выбираются из таблицы по 3-м изменяемым значениям ... это такой сбор статистики определенного рода, но фишка в том - что он должен быть актуален на момент вызова ... просчитывать эти значения на момент их изменения и хранить где - то ... Пойду про мускульные триггеры почитаю и главно с какой версии они работают %))

maXmo ... Спасибо за линк - обязательно пригодится ... но Я щас пока думаю над тем как построить этот запрос, и какой метод выбрать .... а вот потом уже взяться за оптимизацию ... она здесь очень пригодиться - статистические выборки всегда тяжелые ...
...
Рейтинг: 0 / 0
Помогите уйти от вложенного запроса.
    #33431569
DiLLeR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Bzzz - это Я ... решил зарегистрироваться ... Спасибо всем кто ответил и ответит ...
...
Рейтинг: 0 / 0
Помогите уйти от вложенного запроса.
    #33432098
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bzzzполучатся эти Count()'ты выбираются из таблицы по 3-м изменяемым значениям ...ну и нет проблем, джойнишь всё втупую (можно и не втупую), считаешь count(distinct table_N.id) и сгруппировать не забываешь, для каких записей саунты считать.
...
Рейтинг: 0 / 0
Помогите уйти от вложенного запроса.
    #33436256
DiLLeR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maXmo ... Вы Мне не подсобите разобраться, если Я сюда скину часть запроса? ...
...
Рейтинг: 0 / 0
Помогите уйти от вложенного запроса.
    #33436281
DocAl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Про триггеры, конечно, почитайте, но в 4.0 их нету, только в 5 ветке.
А для медленного запроса стоит проанализировать EXPLAIN, вполне возможно, что правильно построенные индексы в достаточной степени его ускорят.
...
Рейтинг: 0 / 0
Помогите уйти от вложенного запроса.
    #33437195
Imo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Imo
Гость
Во-первых, в JOIN усть условия после ON в скобочках можно указывать не только условия объединения но и условия отбора в объединяемых таблицах.
Во-вторых тормоза включаются если вы 2 таблицы объединяете через JOIN а остальные просто присоединяется тогда начинается объединение всех со всеми и оперативка летит в трубу а проц греется, так что не поленитесь прописать условия объединения покачественней или все таблицы в линию через JOIN пишите.
...
Рейтинг: 0 / 0
Помогите уйти от вложенного запроса.
    #33439431
maXmo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DiLLeRmaXmo ... Вы Мне не подсобите разобраться, если Я сюда скину часть запроса? ...давай. Оно большое?
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Помогите уйти от вложенного запроса.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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