当前位置:编程学习 > C#/ASP.NET >>

直销系统会员层次问题

 


以上显示的是一个直销系统的会员结构表。现在得问题是 我怎么样才能只查询显示某一个会员下面的三层会员。
例如:jlxc101 下面的三层包括:王士强、李祖伟、王1、王2、李1、李2、王4、王5、李7、李8.如何得到这个结果。数据库怎么设计 程序应该怎么写。 --------------------编程问答-------------------- 做传销的也来搞程序?这世道真乱。 --------------------编程问答-------------------- LZ可以去51aspx上下了相关的例子看看,还有就是你的图片看不到 --------------------编程问答-------------------- 把图片上传到个人空间

然后引用到这里来
--------------------编程问答-------------------- 在数据库中建立一个员工表,然后在员工表中添加一个leader字段,比如 王士强 leaderID=null、
王1 leaderID=userID(王士强的ID)、王2、王4、王5 后面依此类推,在C#代码中 就如同普通的查询一样reader出来就好了 --------------------编程问答-------------------- 听着意思像是传销。 --------------------编程问答-------------------- 创建表:

create table TCategory
(
    FId int identity primary key ,
    FParentId int,
    FName nvarchar(20)
)


获取树节点的用户函数,

create function [dbo].[FnGetCategoryTree]
(
    @id int --要获取的节点
)
returns 
   @result TABLE (FId int primary key)
as
begin

    if exists(select FId from TCategory where FId=@id)
    begin
        insert into @result values(@id)
    end

    while @@ROWCOUNT>0
    begin
        insert into @result(FId)
        select FId from TCategory
        where FParentId in(select FId from @result) and FId not in(select FId from @result)
    end

    return
end


添加测试数据

set identity_insert TCategory on

insert into TCategory(FId,FParentId,FName)
select 0,null,'root' union
select 1, 0, '分类1' union
select 2, 0, '分类2' union
select 3, 0, '分类3' union

select 11, 1, '1.1' union
select 12, 1, '1.2' union
select 111, 4, '1.1.1' union
select 112, 4, '1.1.2' union

select 21, 2, '2.1' union
select 22, 2, '2.2' union
select 211, 21, '2.1.1' union
select 212, 21, '2.1.2'

set identity_insert TCategory off
dbcc checkident ('TCategory',reseed,0)
dbcc checkident ('TCategory',reseed)


执行一下测试

select * from dbo.FnGetCategoryTree(1)
--------------------编程问答-------------------- 测试数据有点错。。改一下


insert into TCategory(FId,FParentId,FName)
select 0,null,'root' union
select 1, 0, '分类1' union
select 2, 0, '分类2' union
select 3, 0, '分类3' union

select 11, 1, '1.1' union
select 12, 1, '1.2' union
select 111, 11, '1.1.1' union
select 112, 11, '1.1.2' union

select 21, 2, '2.1' union
select 22, 2, '2.2' union
select 211, 21, '2.1.1' union
select 212, 21, '2.1.2'

set identity_insert TCategory off
dbcc checkident ('TCategory',reseed,0)
dbcc checkident ('TCategory',reseed)

--------------------编程问答-------------------- 读取邀请人下面的被邀请人,然后再用递归的方法把被邀请人当做是邀请人,一层一层遍历出来,添加到List里面。  如果你是用TreeNode来显示,那更简单了。 --------------------编程问答-------------------- 这是我做的
protected void btnSearch_Click(object sender, EventArgs e)
    {
        string title = string.Empty;
        tvInvite.Nodes.Clear();
        string rid = txtRid.Text.ToUpper().Trim();
        if (string.IsNullOrEmpty(rid)) return;
        uids.Add(rid);
        ----这里是数据库查询的操作
List<string> bindVariantNames = OracleDataAccessHelper.Prepare(sb);
        OracleCommand cmd = OracleConnectionHelper.DefaultDBConnection.CreateCommand();
        cmd.CommandText = sb.ToString();
        cmd.Prepare();
        int idxOfBindVariant = 0;
        cmd.Parameters.Add(new OracleParameter(bindVariantNames[idxOfBindVariant++], rid));
        OracleDataAdapter da = new OracleDataAdapter(cmd);
        DataTable dt = new DataTable();
        try
        {
            da.Fill(dt);
            if (dt.Rows.Count > 0)
            {
                DataRow dataRow = dt.Rows[0];
                title = DataRowHelper.GetString(dataRow, "NAME");
            }
        }
        catch (Exception)
        {
            throw;
        }
        finally
        {
            da.Dispose();
            dt.Dispose();
        }
        TreeNode tn = new TreeNode();
        tn.Text = title + "," + rid.ToLower();
        tn.ToolTip = rid;
        tn.Expand();
        tvInvite.Nodes.Add(tn);
        BindTree(rid, tn);
        if (checkbox.Checked)
            tvInvite.ExpandAll();
    }
--------------------编程问答-------------------- 其实就是一个多级分组。
二叉树、多叉树。 --------------------编程问答-------------------- 技术是双刃剑,技术本身不没错,传销这个事,害人害己。 --------------------编程问答-------------------- 没有图 树形控件 递归。


参考
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,