日期:2014-05-19  浏览次数:20570 次

|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);
}
}

------解决方案--------------------
呵呵,楼主是不是想做动态控件?根据存在数据库中的数据读取出来以后程序再画出控件来?
只要在表中标示出控件所处在层次就行了