求救..! 用适合的SQL语句来生成这颗树.! ( 积分: 20 )

  • 主题发起人 主题发起人 Jj1985
  • 开始时间 开始时间
J

Jj1985

Unregistered / Unconfirmed
GUEST, unregistred user!
數據庫如下:
region_id name description previous_id next_id
1010201 湘湖管理局 湘湖管理局 -1 1010202
1010213 东岸乡 东岸乡 1010212 -1
1010202 马王堆街道 马王堆街道 1010201 1010203
1010203 东屯渡街道 东屯渡街道 1010202 1010204
1010205 五里牌街道 五里牌街道 1010204 1010206
1010208 浏正街街道 浏正街街道 1010207 1010209
1010209 都正街街道 都正街街道 1010208 1010210
1010212 火星街道 火星街道 1010211 1010213
1010204 朝阳街街道 朝阳街街道 1010203 1010205
1010210 府后街街道 府后街街道 1010209 1010211
1010211 解放路街道 解放路街道 1010210 1010212
1010206 韭菜园街道 韭菜园街道 1010205 1010207
1010207 文艺路街道 文艺路街道 1010206 1010208

現在要求順序為.: 先是顯示previous_id等於-1的街道,在看他的next_id.
接著顯示region_id等於next_id的街道.
就是按上面的順序生成一顆樹.!
我樹是生成出來了..可惜方法不正確..每顯示一次要十秒左右.!
while not (j=-1) do
begin
node3:=tree.Items.AddChild(node2,adoquery4.fieldbyname('name').AsString);
j:=adoquery4.fieldbyname('next_id').AsInteger;
opensql(adoquery4,'select * from base_region where parent_id='+inttostr(adoquery3.fieldbyname('region_id').AsInteger)+' and region_id='+inttostr(j)+'');
j:=adoquery4.fieldbyname('next_id').AsInteger;
end;
node3:=tree.Items.AddChild(node2,adoquery4.fieldbyname('name').AsString);
 
这是一个类似BOM展开的工作,你那个也算是用SQL???晕死
 
到盒子上去搜索"树".
 
运行N多SQL语句.
你应该一次读取所有内容到一个列表里(自己定义一个列表类).
再作处理.
 
要么你用sql查询出需要的数据,并且按你要的顺序排序;要么你全部读取到程序里面,程序里面再判断如何排序。你上面的方式操作SQL太多,数据量大点,何止10S的时间。
 
有没有一点点代码.!
有些方法也想过.!可是不知道用语言来实现.!
 
后退
顶部