Главная страница
    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.003 c
15-1278912781
Leonid Troyanovsky
2010-07-12 09:33
2010.10.17
Что там у нас с анкетами?


2-1279711238
hunt
2010-07-21 15:20
2010.10.17
Отправа POST запроса в форму


11-1225708523
blackman2003
2008-11-03 13:35
2010.10.17
Меню на второй форме - потеря фокуса главного меню


6-1213619893
Empleado
2008-06-16 16:38
2010.10.17
"Досадные недоразумения логики TClient/ServerSocket"


11-1224939346
Neep
2008-10-25 16:55
2010.10.17
Исчезают колонки в ListView при создании без родителя





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский