Форум: "Базы";
Текущий архив: 2010.10.17;
Скачать: [xml.tar.bz2];
Внизпосчитать сумму параметров дочерних эл-тов Найти похожие ветки
← →
nachi (2009-07-01 11:31) [0]Удалено модератором
Примечание: СПАМ
← →
Вариант (2009-07-01 12:25) [1]update имя_таблицы_обновления
set par = (select sum(par) from имя_таблицы_выборки where parent_id =имя_таблицы_обновления.id)
Или в запросе у тебя "tablе" в UPDATE и SELECT одна и та же таблица (имя_таблицы_обновления=имя_таблицы_выборки)?
← →
nachi (2009-07-01 12:42) [2]
> Или в запросе у тебя "tablе" в UPDATE и SELECT одна и та
> же таблица (имя_таблицы_обновления=имя_таблицы_выборки)?
>
ага
← →
Ega23 © (2009-07-01 12:42) [3]Так это же Level получается. Только помноженный на коэффициент, нет?
← →
nachi (2009-07-01 12:45) [4]
> Ega23 © (01.07.09 12:42) [3]
не, значение par может быть любым числом...
← →
Ega23 © (2009-07-01 12:46) [5]Погоди. Вот у меня таблица
1,null,0
2,1,0
3,1,0
4,2,0
5,2,0
6,3,0
7,3,0
при любом изменении par у меня должна запускаться рекурсивная обновлялка, которая смотрит, есть ли да данной записи дети. Если есть - обновить им par
← →
Ega23 © (2009-07-01 12:47) [6]Тогда либо триггер, либо ХП (но обновлять тогда уже строго через неё).
← →
nachi (2009-07-01 12:59) [7]да-да, и триггер есть и ХП... не катит... долго.
а вообще, задача стоит следующая:
tree_table:
id, parent_id, par, uniq_par
text_to_tree:
tree_id, text_id
text_to_tree.tree_id - внешний ключ к tree_table
нужно пересчитывать параметры par и uniq_par следующим образом: каждый параметр par строки дерева равно количеству соответствующих строк в text_to_tree с учетом принадлежности всем дочерним темам. uniq_par - то же самое, только text_id должен быть уникальным в наборе.
Вроде внятно объяснил. Пока данных было мало, этих полей вообще не существовало - все делал запросом, но, с ростом табличек, пришлось от этого отказаться - слишком долго выполнялся запрос. Теперь, тормозит уже просто обновление. Делал так:
update content_tree
set cnt = (SELECT count(u_txt)
FROM text_to_tree
WHERE tree_id IN (
SELECT id
FROM all_subj_child (id)
)),
u_par = (SELECT SUM(u_txt)
FROM text_to_tree
WHERE tree_id IN (
SELECT id
FROM all_subj_child (id)
)),
cnt_uniq = (SELECT COUNT(DISTINCT(text_id))
FROM text_to_tree
WHERE tree_id IN (
SELECT id
FROM all_subj_child (id)
)
) where id in (select id from all_subj_child(@id))
all_subj_child - функция, возвращающая всех детей ветви.
Как решить данную проблему? Приведенный код работает жутко медленно... строк - пока сотня тысяч, где-то...
← →
nachi (2009-07-01 13:08) [8]
> Вариант (01.07.09 12:25) [1]
а вот про from не знал. Спасибо, ща с ним попробую переписать, что выше...
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2010.10.17;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.005 c