- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
var r = from t in ds.ProductTags
where t.ProductTagID == tag
|| t.Parent.ProductTagID == tag
|| t.Parent.Parent.ProductTagID == tag
|| t.Parent.Parent.Parent.ProductTagID == tag
|| t.Parent.Parent.Parent.Parent.ProductTagID == tag
|| t.Parent.Parent.Parent.Parent.Parent.ProductTagID == tag
|| t.Parent.Parent.Parent.Parent.Parent.Parent.ProductTagID == tag
|| t.Parent.Parent.Parent.Parent.Parent.Parent.Parent.ProductTagID == tag
|| t.Parent.Parent.Parent.Parent.Parent.Parent.Parent.Parent.Parent.ProductTagID == tag
select t;
Это мой код. Надоело писать рекурсивные СTE чтобы выбрать всех детишек. Спросил у кастомера можно ли ограничить вложенность. Он согласился ;).. На свою голову ;).
guest 11.11.2009 18:42 # 0
interested 11.11.2009 19:17 # 0
Mike Chaliy 11.11.2009 19:32 # 0
Amok 18.11.2009 12:11 # 0
http://www.rockstarapps.com/wordpress/?p=82
Там нормально описаны выборки без вы%бонов.
А вот псевдокод как легко создать дерево (если оно таки тебе понадобится).
class TreeNode
{
void AddChild(TreeNode* child)
void * data;
}
class SerializedNode
{
int thisId;
int parentId;
void * data;
}
TreeNode * BuildTree(SerializedNode* nodes[], int count)
{
hash_map<int, TreeNode *> insertedMap;
TreeNode * root = new TreeNode();
for (int i = 0; i != count; i++) {
insertedMap.insert(nodes[i]->thisId, nodes[i]);
if (0 == nodes[i]->parentId) {
root.AddChild(nodes[i]);
} else {
insertedMap.find(nodes[i]->parentId).AddChild(nodes[i]);
}
}
return root;
}
Mike Chaliy 18.11.2009 13:07 # 0
Amok 18.11.2009 14:20 # 0
Во-вторых, выборка следует быть с помощью средств СУБД. Хоть статью почитал?
Mike Chaliy 11.11.2009 19:30 # 0
corristo 11.11.2009 21:49 # 0
spbAngel 11.11.2009 22:15 # +1
Mike Chaliy 11.11.2009 22:49 # 0
guest 16.11.2009 18:22 # +0.2
guest 16.12.2009 13:42 # 0
Интересно посмотреть на скрип которий линк сгенерит и пустит на сиквел.
Mike Chaliy 16.12.2009 14:07 # 0
Magic 28.05.2010 12:13 # 0
на самом деле деревянные данные достаточно часто трабл - обычно пишу хранимую процедуру и это правильно с точки зрения как читаемости кода, так и производительности - можно написать ее 1 раз и копипастить с минимальными изменениями для всех деревьев ;)