2013-08-16 6 views
0

я разработал структуру TreeView, как показано ниже: * ParentID = 0 означает корень деревасоздать TreeView цикл запроса

ID parentID 
1  0 
2  0 
3  1 
4  1 
5  1 
6  3 
7  4 
8  5 
9  5 
10  5 
11  2 
12  2 
13  10 

Когда я передать параметр «1» будет возвращать результат все под корень " 1 ", Ожидаемый результат:

ID parentID 
1  0 
3  1 
4  1 
5  1 
6  3 
7  4 
8  5 
9  5 
10  5 
13  10 

можно решить это одним запросом?

ответ

0

Так как вы сохранили дерево сейчас, невозможно получить все дерево в одном чистом SQL-запросе. Вам нужно написать цикл на другом языке (C#, хранимая процедура, которая поддерживает петли, ...), чтобы получить дерево.

This - хорошая статья, описывающая, как работать с вашим способом хранения дерева (включая извлечение дерева и удаление элементов из дерева).

Еще более интересно, что в этой статье также описывается способ хранения деревьев в таблице базы данных, которые делает, позволяя извлекать все дерево в одном запросе. Это называется pre-order tree traversal. Вы можете найти его для получения дополнительной информации. Я нашел C# implementation. Это требует некоторой логики, чем то, как вы сейчас используете, но более совершенен для всех, кроме самых маленьких деревьев.

Смежные вопросы