Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Выборка из нескольких таблиц. [D6, MySQL]


Becket ©   (2003-02-20 22:42:00) 

Наверняка вопрос очень простой, но для меня актуальный.
Есть несколько таблиц (5), выбираю из низ необходимые данные, из каждой. Затем нужно свести их в один отчет, по совпадающим ключевым полям.
Не могу догнать, как оптимизировать этот процесс.
У меня получается очень долго.
Какой алгоритм посоветуете?


fidget   (2003-02-21 13:33:00) [1]

> Вообще MySQL пока не поддерживает UNION :(
> Но общают когда-нибудь сделать :)

они сделали это больше года назад в 4.0

как насчет индексов? они есть? используются?


Becket   (2003-02-21 00:57:00) [2]

2 Johnmen
По времени одинаково выходит.


2 AM
Вообще MySQL пока не поддерживает UNION :(
Но общают когда-нибудь сделать :)

2 All
Спасибо, видимо, придется пока остаться при своем...


AM   (2003-02-21 00:07:00) [3]

А я думал у тебя идет один запрос...

Я не знаю MySQL, но если он поддерживает вложенные запросы и
" UNION ALL " то все что ты делаешь можно сделать с помощью одного запроса...


Johnmen   (2003-02-21 00:07:00) [4]

1. distinct здесь неуместен
2.
select
code,
sum(tbl1.quant),
sum(tbl2.quant),
sum(tbl3.quant),
from tbl1, tbl2, tbl3
where (tbl1.code=tbl2.code) and (tbl1.code=tbl3.code) and
(code=...)
....


Becket   (2003-02-20 23:59:00) [5]

Ну примерно вот так :)

procedure TForm1.Table1CalcFields(DataSet: TDataSet);
begin
Query1.SQL.Clear;
Query1.SQL.Add("select distinct code, sum(quant) from tbl1 where code="+QuotedStr(Table1code.Value)+" group by code");
Query1.Open;
Table1f1.Value:=Query1sumquant.AsInteger;
Query1.SQL.Clear;
Query1.SQL.Add("select distinct code, sum(quant) from tbl2 where code="+QuotedStr(Table1code.Value)+" group by code");
Query1.Open;
Table1f2.Value:=Query3sumquant.AsInteger;
Query1.SQL.Clear;
Query1.SQL.Add("select distinct code, sum(quant) from tbl3 where code="+QuotedStr(Table1code.Value)+" group by code");
Query1.Open;
Table1f3.Value:=Query2sumquant.AsInteger;
Table1f4.Value:=Table1f1.Value-Table1f2.Value+Table1f3.Value;
end;


AM   (2003-02-20 23:59:00) [6]

Если это запрос типа "SELECT ..."
Таблиц не более 5-ти.
Из твоих слов понятно, что вложенность запросов не совсем большая...
5-7 минут - это очень много, если конечно у тебя количество строк в таблицах не по несколько сотен тысяч, количество столбцов несколько сотен и процессор какой-нибудь Pentium-166.

Попробуй перезагрузи компьютер и/или сервер...


Johnmen   (2003-02-20 23:48:00) [7]

А как выглядит сам процесс ? :)


Becket   (2003-02-20 23:42:00) [8]

MySQL
Минут 5-7.


KIR   (2003-02-20 22:56:00) [9]

Какой СУБД пользуешься?
Долого, это сколько?


Наверх

Титульная страница Поиск, карта сайта Написать письмо