怎样建立这种树结构?请高手指点!(急)

jdal 2004-11-18 09:46:07
比如原来有地区树结构如下:
浙江
| |
| |-----杭州
|
江西
| |
| |-----南昌
|
四川
|
|-----合肥

比如原来有商品树结构如下:
仪器
| |
| |-----OMNIC分析仪
| |-----微量荧光仪
|
药品
| |
| |-----人真胰岛素(125T)
| |-----54人份血清蛋白
|
办公用品
|
|-----打印机
|-----复印机

原来的树结构表是分开的,现在要形成的树状结构要求如下:
浙江
| |
| |---杭州
| |
| 仪器
| | |
| | |----OMNIC分析仪
| | |----微量荧光仪
| |
| 药品
| | |
| | |----人真胰岛素(125T)
| | |----54人份血清蛋白
| |
| 办公用品
| |
| |----打印机
| |----复印机
|
江西
| |
| |-----南昌
| |
| 仪器
| | |
| | |----OMNIC分析仪
| | |----微量荧光仪
| |
| 药品
| |
| |----人真胰岛素(125T)
| |----54人份血清蛋白
|
四川
|
|----合肥
|
|
药品
| |
| |----人真胰岛素(125T)
| |----54人份血清蛋白
|
办公用品
|
|----打印机
|----复印机

因为原先为不同的类别,现在是先地区,再物品。地区树下的物品树是不一样的。

请问得怎么来实现??
...全文
155 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
jdal 2004-11-18
  • 打赏
  • 举报
回复
我现在树中的记录数量是很大的。

要是用DELPHI中所说的动态的去加载,那速度是会很慢的。

我是说用SQL语句先把两棵树(主从关系)的树,合并成一棵树。

请问,得怎么来写这样的SQL程序!
jdal 2004-11-18
  • 打赏
  • 举报
回复
目前的表是定死的,也就是只有
地区表和商品表

不过商品表中有地区的ID号的。

本来就是一主从树的关系。
现要求在一棵树中来体现出来。


就是用SQL怎么来形成一棵树?
jdal 2004-11-18
  • 打赏
  • 举报
回复
是无限的分级!
txlicenhe 2004-11-18
  • 打赏
  • 举报
回复
地区表:
地区父级ID 地区子级ID

商品表:
商品父级ID 商品子级ID

地区商品表:
地区子级ID 商品子级ID
davorsuker39 2004-11-18
  • 打赏
  • 举报
回复
同意楼上的!!
Delphi工具TTreeView就可以做了
类似于这样
数据结构如下:
CREATE TABLE [tbTree] (
[ID] [varchar] (4) COLLATE NOT NULL ,
[Context] [nvarchar] (50) NULL ,
[ParentID] [varchar] (4) NULL ,
CONSTRAINT [PK_tbTree] PRIMARY KEY CLUSTERED
(
[ID]
) ON [PRIMARY]
) ON [PRIMARY]
代码如下:

lprocedure TForm1.ReadTree(tnode:TTreeNode;Fvalue: String);
lVar
l i: integer;
l Flist:TStringList;
l Flist1:TStringList;
l str:string;
lbegin
l qryTree.close;
l qryTree.sql.clear;
l qryTree.sql.add('select Parentid,id,context from tbtree');
l qryTree.sql.add('where isnull(Parentid,'''')=');
l qryTree.sql.add(''''+Fvalue+'''');
l qryTree.Open;
l qryTree.First;
l Flist:=TStringList.Create;
l Flist1:=TStringList.Create;
l while not qryTree.eof do
l begin
l Flist.Add(trim(qryTree.fieldbyname('context').asstring));
l Flist1.Add(qryTree.fieldbyname('id').asstring);
l qryTree.next;
l end;
l for i:= 0 to flist.Count-1 do
l begin
l s:=flist1.Strings[i];
l str:=flist.Strings[i];
l snode:=Treeview1.items.addchild(tnode,str);
l ReadTree(snode,s);
l end;
l flist.free;
l flist1.free;
lend;
mich1234 2004-11-18
  • 打赏
  • 举报
回复
是无限分级还是有限分级呀
lyzzbbgo 2004-11-18
  • 打赏
  • 举报
回复
不明白...
jdal 2004-11-18
  • 打赏
  • 举报
回复
怎么说?
chinaandys 2004-11-18
  • 打赏
  • 举报
回复
如果是Delphi可以用TTreeView.



34,591

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧