|M| 求一条SQL查询语句
如有表
tab
Id name parentID
1 文件 0
2 编辑 0
3 工具 0
4 剪切 2
5 新建 1
6 复制 2
7 打开 1
8 保存 1
9 初始 9
10 选项 3
上面是一条多级菜单表
绑定树的时候为
文件
新建
打开
保存
编辑
剪切
复制
工具
选项
初始
现在要通过SQL语句把上面的表查询排序为
Id name parentID
1 文件 0
5 新建 1
7 打开 1
8 保存 1
2 编辑 0
4 剪切 2
6 复制 2
3 工具 0
10 选项 3
9 初始 9
这个样子谢谢
[解决办法]
排序做什么呀,是不是最终在页面上显示呀
[解决办法]
搞不清楚你这样弄有什么实际意义?
[解决办法]
SQL的输出不可能是你需要的菜单的,这样没什么意义,另外
----------------------
9 初始 9
----------------------
改一下
[解决办法]
用SQL语句不容易实现,你无非是要构造树,可以先读入数据集,然后使用下面的函数。调用方法是:
FillTree(DataSet1.xxTable, TreeView1.Nodes, "根的父结点ID,你的是0 ", "parentID ", "ID ", "name ", "ID ", NavigetUrl, Target);
适用于框架结构,如果不是这种结构,自己改一下就是了。
/// <summary>
/// 填充树控件
/// </summary>
/// <param name= "dt "> 树控件结构所在表 </param>
/// <param name= "tns "> 节点集合 </param>
/// <param name= "strParentID "> 父节点值 </param>
/// <param name= "strParentField "> 父节点字段 </param>
/// <param name= "strSortField "> 排序字段 </param>
/// <param name= "strTextField "> 显示文本字段 </param>
/// <param name= "strValueField "> 值字段 </param>
/// <param name= "strNavigate "> 导航页 </param>
/// <param name= "strTarget "> 导航目标 </param>
public void FillTree(DataTable dt, TreeNodeCollection tns, string strParentID, string strParentField, string strSortField, string strTextField, string strValueField, string strNavigate, string strTarget)
{
TreeNode tn = null;
DataRow[] drs = dt.Select(string.Format( "{0}={1} ", strParentField, strParentID), strSortField);
foreach (DataRow dr in drs)
{
tn = new TreeNode();
tn.Text = dr[strTextField].ToString();
tn.Value = dr[strValueField].ToString();
tn.NavigateUrl = string.Format( "{0}?P={1} ", strNavigate, dr[strValueField]);
tn.Target = strTarget;
tns.Add(tn);
FillTree(dt, tn.ChildNodes, dr[strValueField].ToString(), strParentField, strSortField, strTextField, strValueField, strNavigate, strTarget);
}
}
[解决办法]
呵呵,楼主是不是想做动态控件?根据存在数据库中的数据读取出来以后程序再画出控件来?
只要在表中标示出控件所处在层次就行了
[解决办法]
[解决办法]
--借用一個函數來實現。
--建立測試環境
Create Table tab
(IDInt,
nameNvarchar(10),
ParentIDInt)
Insert tab Select 1, N '文件 ', 0
Union All Select 2, N '编辑 ', 0
Union All Select 3, N '工具 ', 0
Union All Select 4, N '剪切 ', 2
Union All Select 5, N '新建 ', 1
Union All Select 6, N '复制 ', 2
Union All Select 7, N '打开 ', 1
Union All Select 8, N '保存 ', 1
Union All Select 9, N '初始 ', 10
Union All Select 10, N '选项 ', 3
GO
--建立函數
Create Function GetParent(@ID Int)
Returns Varchar(8000)
As
Begin
Declare @S Varchar(8000)
Select @S = ', ' + Rtrim(ID), @ID = ParentID From tab Where ID = @ID
While @@ROWCOUNT > 0
Select @ID = ParentID, @S = ', ' + Rtrim(ID) + @S From tab Where ID = @ID
Return @S
End
GO
--測試
Select * From tab Order By dbo.GetParent(ID), ID
GO
--刪除測試環境
Drop Table tab
Drop Function GetParent
--結果
/*
IDnameParentID
1文件0
5新建1
7打开1
8保存1
2编辑0
4剪切2
6复制2
3工具0
10选项3
9初始10
*/
[解决办法]
[解决办法]
--借用一個函數來實現。
--建立測試環境
Create Table tab
(IDInt,
nameNvarchar(10),
ParentIDInt)
Insert tab Select 1, N '文件 ', 0
Union All Select 2, N '编辑 ', 0
Union All Select 3, N '工具 ', 0
Union All Select 4, N '剪切 ', 2
Union All Select 5, N '新建 ', 1
Union All Select 6, N '复制 ', 2
Union All Select 7, N '打开 ', 1
Union All Select 8, N '保存 ', 1
Union All Select 9, N '初始 ', 10
Union All Select 10, N '选项 ', 3
GO
--建立函數
Create Function GetParent(@ID Int)
Returns Varchar(8000)
As
Begin
Declare @S Varchar(8000)
Select @S = ', ' + Rtrim(ID), @ID = ParentID From tab Where ID = @ID
While @@ROWCOUNT > 0
Select @ID = ParentID, @S = ', ' + Rtrim(ID) + @S From tab Where ID = @ID
Return @S
End
GO
--測試
Select * From tab Order By dbo.GetParent(ID), ID
GO
--刪除測試環境
Drop Table tab
Drop Function GetParent
--結果
/*
IDnameParentID
1文件0
5新建1
7打开1
8保存1
2编辑0
4剪切2
6复制2
3工具0
10选项3
9初始10
*/
--------------------------------
顶了,学习