使用树形结构的查询。

ZMAK_Chun 2012-06-04 09:32:03
表结构
id name Pid
1 通信 0
2 通信_1 1
3 通信_2 1
4 通信_3 1
5 汽车 0
6 汽车_1 5
7 移动 0
8 移动_1 7

一组树形结构,现在我传入了一组id,无序的,如何找出这个id是否为父节点,并且把这一组id中所有的子节点id显示?

比如,传入 2,1,4,7,8
显示
通信,通信_1,通信_3,移动,移动_1
...全文
205 12 打赏 收藏 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
ZMAK_Chun 2012-06-06
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]

引用 7 楼 的回复:
引用 6 楼 的回复:

估计是你服务器跟我的排序方式不一样

我看了下代码,您这边貌似是通过
(@str,len(@str)-1)来决定排序,
现实中的资料可能有点出入..我还是看看用pid来排序的方法..谢谢了哦~


这个不是排序,是删除前导空格

SQL code
可以用
SELECT RTRIM(@str) AS Value
取代
s……
[/Quote]
我说的排序呢 不是插入顺序,,是那个父级和子级的顺序~
amazeyeli 2012-06-05
  • 打赏
  • 举报
回复
搞错了,是删除前面的逗号
amazeyeli 2012-06-05
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
引用 6 楼 的回复:

估计是你服务器跟我的排序方式不一样

我看了下代码,您这边貌似是通过
(@str,len(@str)-1)来决定排序,
现实中的资料可能有点出入..我还是看看用pid来排序的方法..谢谢了哦~
[/Quote]

这个不是排序,是删除前导空格

可以用
SELECT RTRIM(@str) AS Value
取代
select right(@str,len(@str)-1) as value
gogodiy 2012-06-05
  • 打赏
  • 举报
回复
或者这样:

CREATE TABLE t1
(
id INT,
name VARCHAR(20),
pid INT
)
INSERT INTO t1
SELECT 1, '通信', 0 UNION all
SELECT 2, '通信_1', 1UNION all
SELECT 3, '通信_2', 1 UNION all
SELECT 4, '通信_3', 1 UNION all
SELECT 5, '汽车', 0 UNION all
SELECT 6, '汽车_1', 5 UNION all
SELECT 7, '移动', 0 UNION all
SELECT 8, '移动_1', 7
SELECT * FROM t1 WHERE id IN (2,1,4,7,8) ORDER BY id

-------------------------
id name pid
1 通信 0
2 通信_1 1
4 通信_3 1
7 移动 0
8 移动_1 7
gogodiy 2012-06-05
  • 打赏
  • 举报
回复
输入无序,你可以全部插入临时表,然后order by有序查询出来即可。
ZMAK_Chun 2012-06-04
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

估计是你服务器跟我的排序方式不一样
[/Quote]
我看了下代码,您这边貌似是通过
(@str,len(@str)-1)来决定排序,
现实中的资料可能有点出入..我还是看看用pid来排序的方法..谢谢了哦~
  • 打赏
  • 举报
回复
估计是你服务器跟我的排序方式不一样
ZMAK_Chun 2012-06-04
  • 打赏
  • 举报
回复
- -为啥我查出来是
通信,汽车,通信_1,通信_2
- -这...
  • 打赏
  • 举报
回复

--> 测试数据:[test]
if object_id('[test]') is not null drop table [test]
create table [test]([id] int,[name] varchar(6),[Pid] int)
insert [test]
select 1,'通信',0 union all
select 2,'通信_1',1 union all
select 3,'通信_2',1 union all
select 4,'通信_3',1 union all
select 5,'汽车',0 union all
select 6,'汽车_1',5 union all
select 7,'移动',0 union all
select 8,'移动_1',7

declare @str varchar(100)
set @str=''
select @str=@str+','+[name] from test
where id in(8,4,2,7,1)
select right(@str,len(@str)-1) as value
/*
value
---------------------------------------
通信,通信_1,通信_3,移动,移动_1
*/

结果一样的
ZMAK_Chun 2012-06-04
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

SQL code

--> 测试数据:[test]
if object_id('[test]') is not null drop table [test]
create table [test]([id] int,[name] varchar(6),[Pid] int)
insert [test]
select 1,'通信',0 union all
select 2,'通信_1',1 uni……
[/Quote]
谢谢大神...但是输入有序的查询方法.我这边也实现了..就是想想如果输入的是无序的,是否也能按照树形的结构排列出来
  • 打赏
  • 举报
回复

--> 测试数据:[test]
if object_id('[test]') is not null drop table [test]
create table [test]([id] int,[name] varchar(6),[Pid] int)
insert [test]
select 1,'通信',0 union all
select 2,'通信_1',1 union all
select 3,'通信_2',1 union all
select 4,'通信_3',1 union all
select 5,'汽车',0 union all
select 6,'汽车_1',5 union all
select 7,'移动',0 union all
select 8,'移动_1',7

declare @str varchar(100)
set @str=''
select @str=@str+','+[name] from test
where id in(1,2,4,7,8)
select right(@str,len(@str)-1) as value
/*
value
---------------------------------------
通信,通信_1,通信_3,移动,移动_1
*/

牛哥_ 2012-06-04
  • 打赏
  • 举报
回复
不会,期待中……
内容概要:本文针对质子交换膜燃料电池(PEMFC)在动态压力工况下的最大功率点跟踪(MPPT)问题,提出了一种压力工况协同调控下的自适应高阶滑模控制策略,并基于Simulink平台完成了系统建模与仿真实现。该策略融合高阶滑模控制的强鲁棒性与自适应机制的参数在线优化能力,有效克服了PEMFC系统固有的非线性、外部扰动及工况时变性等挑战,实现了对最大功率点的快速、精确与稳定跟踪。研究内容涵盖控制策略的理论设计、李雅普诺夫稳定性分析、自适应律构建以及在多种动态工况下的仿真实验验证,结果表明该方法相较于传统控制策略具有更快的动态响应速度、更小的稳态振荡以及更强的抗干扰能力,显著提升了PEMFC系统的能量转换效率与运行稳定性。; 适合人群:具备一定控制理论基础和Simulink仿真经验,从事新能源发电系统、燃料电池控制、电力电子变换或先进控制算法研究的研发人员及高校研究生。; 使用场景及目标:①应用于燃料电池发电系统的高性能最大功率点跟踪控制设计;②为解决强非线性、多扰动耦合的能源系统提供先进的自适应鲁棒控制方案;③通过Simulink仿真验证高阶滑模与自适应控制算法的有效性,服务于科研项目攻关或工程原型开发。; 阅读建议:建议读者结合Simulink模型同步学习,重点关注控制律设计原理、自适应机制实现方式及仿真结果对比分析部分,并可通过与传统滑模控制进行对比,深入理解该策略在鲁棒性与动态性能上的优越性。

34,876

社区成员

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

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