求助,关于perl SQL 递归查询问题
时间:2010-10-11
来源:互联网
各位高手,大家好,
我使用perl的Win32::ODBC在做SQL查询的时候遇到了一个问题。我需要统计一个节点下的多个节点的总数,
也就是说,数据库描述的是一个树形结构,每一个节点是一个树叶(叶子节点)或者一个文件夹(还有子节点),层数是未知的,目前的问题是
在使用
$db_handle->Sql($cmd)
做查询的时候,我想对每一个节点再做递归查询,但问题是,Win32::ODBC每次查询之后会保存一个查询上下文(也就是查询语句和结果),如果对某一条记录继续查询的话,会破坏前一个查询上下文从而无法实现递归查询,目前的想法是把所有节点都保存到一个数组里,再对每一个节点做检查,但是层数是未知的,所以也无法硬性实现。
不知道有没有人遇到过和我相同的问题,谢谢!
我使用perl的Win32::ODBC在做SQL查询的时候遇到了一个问题。我需要统计一个节点下的多个节点的总数,
也就是说,数据库描述的是一个树形结构,每一个节点是一个树叶(叶子节点)或者一个文件夹(还有子节点),层数是未知的,目前的问题是
在使用
$db_handle->Sql($cmd)
做查询的时候,我想对每一个节点再做递归查询,但问题是,Win32::ODBC每次查询之后会保存一个查询上下文(也就是查询语句和结果),如果对某一条记录继续查询的话,会破坏前一个查询上下文从而无法实现递归查询,目前的想法是把所有节点都保存到一个数组里,再对每一个节点做检查,但是层数是未知的,所以也无法硬性实现。
不知道有没有人遇到过和我相同的问题,谢谢!
作者: hepower 发布时间: 2010-10-11
最好不要所有都保存到一个数组里面,保存成一个类似的树型结构是最清晰的。另外 Perl 的 hash 和 array 从来没有限制是固定大小的啊
作者: zhlong8 发布时间: 2010-10-11
建议方法有两种:
如果需要保存树的结构,建议用递归加hash
复制代码
如果只是统计,用堆栈可能会更快一点
复制代码
如果需要保存树的结构,建议用递归加hash
- my %result;
- my $root = '根节点';
- &lala($root,\%result);
-
- sub lala(){
- my ($node,$result_ref) = shift;
- my %temp_hash;
- $$result_ref{$node} = \%temp_hash;
- my @temp = &search_sub_node($node);
- for(@temp){
- if(-d $_){
- $temp_hash{$_} = {};
- &lala($_,\%temp_hash);
- }
- else{
- $temp_hash{$_} = undef;
- }
- }
- }
- my @result;
- my $root = '根节点';
- @result = &lele($root);
- sub lele(){
- my @folder = @_;
- my @temp_result;
- while(scalar @folder >0){
- my $node = shift @folder;
- my @temp = &search_sub_node($node);
- for(@temp){
- if(-d $_){
- push @folder,$_;
- }
- else{
- push @result,$_;
- }
- }
- }
- return @temp_result;
- }
作者: 珞水的大叔 发布时间: 2010-10-11
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28