вопрос к знатокам.
Необходимо обрабатывать рекурсивную структуру данных, хранящуюся в БД. Использую mdb & ADO + MS Jet 4.0 + С++ #import. ТК попытки создать рекурсивный запрос оказались безуспешными, для обработки поддререва складываю все идентификаторы его узлов во временную таблицу и обрабатываю каждый отдельный узел в цикле с помощью параметризованного объекта Command. Есть, однако идея создать запрос с условием вида "IN (ID1, ID2, ...)" (здесь без цикла, правда тоже не выйдет) — где IDn — идентификаторы узлов, и обработать все выбранные узлы через 1 запрос.
while (!pRecordset->ADOEOF) {
pCommand->GetParameters()->GetItem(0L)->Value =
(long)pRecordset->GetFields()->GetItem(0L)->Value;
pCommand->Execute(NULL, NULL, adCmdText);
pRecordset->MoveNext();
}
VS
CString qstr, tmpstr;
while (!pRecordset->ADOEOF) {
tmpstr.Format(_T("%d, "), (long)pRecordset->GetFields()->GetItem(0L)->Value); // вместо Format можно и _ltot
qstr += tmpstr;
pRecordset->MoveNext();
}
qstr.Format(_T("UPDATE ... WHERE ID IN (%s);"), qstr.Left(qstr.GetLength() - 2)); // убираем лишнюю запятую
pCommand->CommandText = _bstr_t(qstr);
pCommand->Execute(NULL, NULL, adCmdText);
Что из этого лучше с позиций перфоманса?
Носок исчез в гильбертовом пространстве. Туда ему и дорога.
Здравствуйте, last shinji, Вы писали:
LS>Что из этого лучше с позиций перфоманса?
Есть подозрение, что лучше всего тебе поменять структуру базы. Если insert'ы новых узлов редки, то стоит использовать представление дерева в виде nested sets (его тут уже описывали не раз). Если апдейты могут быть частыми, то стоит хранить matherialized paths, т.е. полный путь от корня до конечного узла. В обоих случаях выборка поддерева выполняется одним запросом.
... << RSDN@Home 1.1.4 beta 1 >>
Носок исчез в гильбертовом пространстве. Туда ему и дорога.
Здравствуйте, last shinji, Вы писали:
L>>Есть подозрение, что лучше всего тебе поменять структуру базы. Если insert'ы новых узлов редки, то стоит использовать представление дерева в виде nested sets <cut, cut, cut>...
LS>А можно по подробнее про эти nested sets (желательно ссылки), поиск по сайту выдает, не то, что хотелось бы.
http://www.dbazine.com/tropashko4.shtml... << RSDN@Home 1.1.4 beta 1 >>