Учитывая простую структуру данных:
ID | Category_Name | Parent_ID
Пример:
1 Cars 0
2 Boxes 0
3 Lamborghinis 1
4 VW Camper Vans 1
5 Big Boxes 2
6 Small Boxes 2
7 Cereal Boxes 2
8 Broken Lambos 3
9 Yellow Ones 3
10 Rusty 8
11 Milkshake Stained 8
12 Chocolate Flavour 11
13 Strawberry 11
14 Indiscernible Solution 11
Представляя простую древовидную структуру навигации, какой программно был бы лучший способ получить дерево в презентабельном формате? Можем ли мы создать оператор SQL, чтобы получить их «по порядку»?
Спасибо за любую помощь! Если мой подход неверен, не стесняйтесь комментировать.
Я использую SQL-Server 2000.
Я обычно строю древовидную структуру в коде моего приложения. Частично потому, что я более уверен в C #, чем в SQL, но также потому, что мне обычно все равно нужно преобразовать данные в подходящие структуры C #.
SQL плохо справляется с рекурсивными структурами, такими как списки и деревья. Если бы мне пришлось поместить построение дерева в свою базу данных, я бы выбрал хранимую процедуру. Но может быть хитрый способ, о котором я не знаю.
Если вы используете Oracle, вы можете что-нибудь взломать с помощью Connect By .
Не для SQL2000, но если вам удастся перейти на 2k5, вы можете сделать
WITH t AS(SELECT id, parent_id, category_name FROM mytable WHERE parent_id IS NULL
UNION ALL
SELECT c.id, c.parent_id, c.category_name FROM t p JOIN mytable c ON c.parent_id = p.id)
SELECT * FROM t