Создание отчета

m1rag3
Дата: 31.05.2004 11:47:25
Тут такая задача...
Имеется таблица Спецификация, в ней есть поле Код_позиции и Родитель.
Суть такая. Изначально имеем определенное значение Код_позиции и выбираем все записи из данной таблицы с этим кодом. Затем необходимо в этой же таблице найти все записи, где поле Родитель содержит значение данного Кода_позиции. Для полученных записей cделать то же самое и так пока поиск не даст нулевого результата. Уровень вложенности произвольный. В отчете все это должно представляться в виде древовидной структуры.
Товарисчи, памагите кто могет, pls!
paparome
Дата: 31.05.2004 11:50:12
А вы не братья?
дерево в отчет...

Для начала надо структуру данных менять (ИМХО)
m1rag3
Дата: 31.05.2004 11:55:24
Всегда поражался проницательности русских людей... 8-) Мы не братья, просто работаем вместе, я просто решил поконкретней вопрос задать... :-)))))
А что ты имеешь в виду под изменением структуры данных? Была конечно мысль создать временную таблицу и уже по ней строить отчет, но хотелось бы узнать мнение компетентных людей, может есть простой способ.
paparome
Дата: 31.05.2004 12:05:38
Имеется ввиду (это чисто пример, есть и другие способы):

1. Добавляем поле в котором храним полную иерархию
str_ie

Для корня оно = ""
Для потомнок первого уровня "1" ("2", "3")
Для потомков второго уровня (например для "2") = "21" ("22", "23")

Примерно:
id parent str_ie
1 Null ""
2 1 "1"
3 1 "2"
4 2 "11"
5 1 "3"
6 2 "12"
7 6 "121"

Идея ясна?

Запрос вывода поддерева для некоторой вершины с id = (например 2)

Select t1.*
From tbl t1 Inner Join tbl t2
On (t2.id = 2) And (t1.str_ie Like t2.ie & "*")

Порядок вложенности можно определять по длине поля str_ie :)
m1rag3
Дата: 31.05.2004 12:16:12
Это конечно хорошо, пока ID один разряд занимает, а когда больше и числа получатся разной длины? Или резервировать в str_ie разряды, заполняя незначащие нулями? Да, кстати, а то что выборка строится по текстовому полю не скажется на скорости при большом размере БД?
paparome
Дата: 31.05.2004 12:23:40
Зарделяй точками!

Т.е.
Примерно:
id parent str_ie
1 Null "."
2 1 ".1."
3 1 ".2."
4 2 ".1.1."
5 1 ".3."
6 2 ".1.2."
7 6 ".1.2.1."

?

автор
Да, кстати, а то что выборка строится по текстовому полю не скажется на скорости при большом размере БД?

ИМХО:
1. используется первый значащий символ (возможно использование индексов)
2. быстрее будет, чем по рекордсету в цикле шарахаться :) - ну в крайнм случай - это всего один проход, а не по количеству вложенностей (которые не известны :( )