Есть узел, надо получить список всех узлов, куда он входит.
Есть запрос, который получает родителей по таблицам BOM и BOMTable.
PS: bomTable.ItemId_X - это код номенклатуры спецификации
X++:
while select itemId_X from bomTable
join bom where bom.BOMId == bomTable.BOMId &&
bom.ItemId != bomTable.ItemId_X && bom.ItemId == '01.02.08.01.01.0002'
{
tmpItemLocal.clear();
tmpItemLocal.ItemId = bomTable.ItemId_X;
tmpItemLocal.LineNum = level+1;
tmpItemLocal.insert();
}
Как рекурсивно пройтись?
PS: в SQL это будет как-то так:
PHP код:
DECLARE @tbl TABLE (itemid NVARCHAR(33), num INT);
DECLARE @itemId VARCHAR(MAX);
DECLARE @kol INT, @num INT;
SET @kol = 1; SET @num = 0;
SET @itemId = '01.02.08.01.01.0002'
INSERT INTO @tbl(itemid, num)
SELECT @itemId, '', @num AS num;
WHILE @kol > 0
BEGIN
---Ищем всех родителей
INSERT INTO @tbl
SELECT bomtable.itemid_ztr, @num + 1 AS num
FROM BOMTable bomtable
JOIN BOM bom ON bom.dataareaid = bomtable.dataareaid
AND bom.bomid = bomtable.bomid
AND bomtable.itemid_ztr <> bom.itemid
WHERE bom.itemid IN ( SELECT itemid FROM @tbl WHERE num = @num )
AND bomtable.dataareaid = 'xxx';
SELECT @kol = ( SELECT COUNT(*) FROM @tbl WHERE num = @num );
SELECT @num = @num + 1;
END;-- WHILE
SELECT * FROM @tbl ORDER BY num, itemid;