简单SQL语句问题(30分)

  • 主题发起人 主题发起人 bitzxs
  • 开始时间 开始时间
如何用Delphi程序实现这样的排序呢?急!!
如果分太低,另加30分!!!
 
bitzxs:
PARENT是什么,是代表属于那个公司吗?如果是这样,你得到的结果就不对!

ID NAME PARENT
20 公司1
1 1科 20
4 1科A 1
8 1科AA 4
10 1科AAA 8
12 1科AAAA 10
11 1科AAB 8
9 1科AB 4
5 1科B 1
2 2科 20
6 2科A 2
3 3科 20
7 3科A 3
23 公司2
14 1科 23
...
 
to 沈前卫:
PARENT代表所在记录的父节点ID。
根节点的PARENT(如公司1、公司2)均为-1。
 
用SP,里面用写临时表试试看,不过就是会比较复杂,我还没写出来!
最好还是该为分级

!或者,利用TREEVIEW处理可以得到这样的效果,但想得到结果集就难喽!
在TREEVIEW的TAG或DATA中存储上一层父结点的信息!
 
TO mitsukow:
利用TREEVIEW处理如何得到这样的效果呢?
 
treeview的每个node.data是一个pointer
可以在data中写入parent的值,更具data的值就可以生成子节点,在将子节点的data
写入parent的值,如此循环直至数据集的值全部读完并生成一棵树treeview。
 
TO mitsukow:
能否用程序代码说明?
 
在表中加一字段sort_ID作为标记,初始值为零.如下代码,运行后sort_ID中的值即
为排序结果.

var
sort_ID:integer;

procedure TForm1.sortItem(myID: integer);

begin
while table1.Locate('parent;sort_ID',varArrayof([myID,0]),[]) do
begin
sort_ID:=sort_ID+1;
table1.Edit;
table1['sort_ID']:=sort_ID;
table1.Post ;
sortItem(table1['ID']);
end;

end;

procedure TForm1.Button1Click(Sender: TObject);
begin
sort_ID:=0;
sortItem(-1);
end;

这实际是个深度优先遍历算法.
 
TO gxg8816:
真是高手,看来要向你发饷了!不过,
在库表结构不变的情况下,如何实现将表中
记录在TREEVIEW中实现层次效果,并且节点
的DATA属性指向记录?
 
库表结构不变,我也没想好,主要难点是记录集中很难保持搜索状态,不知哪些排序过
了.
况且,我并不推荐用这种方法.做数据库应用系统,结构设计是最重要的.数据结构不合
理,单靠客户端语言算法,数据量大时,速度会很慢.
 
TO gxg8816:
好象你上面的算法只是对只有一个根有效(如上只有
公司1)但无法对公司2...n排序。
 
没问题呀!只要parent=-1就行.
 
接受答案了.
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
S
回复
0
查看
835
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
S
回复
0
查看
765
SUNSTONE的Delphi笔记
S
后退
顶部