Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
15-1279201889
antsa
2010-07-15 17:51
2010.10.17
Мышь в cmd


15-1279237807
dmk
2010-07-16 03:50
2010.10.17
Подскажите зоны отдыха в Подмосковье


15-1279321281
_Eraser
2010-07-17 03:01
2010.10.17
Администрации. Опять проблемы с анкетами


8-1206713265
VBit
2008-03-28 17:07
2010.10.17
Включение линейного входа


8-1206823308
DoKi
2008-03-29 23:41
2010.10.17
приближение камеры





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский