一个表有2个字段表结构如下
packid(当前ID)     packidtemp(上级ID)
12                    14
14                    15
15怎么样获取当前ID对应的最高ID

解决方案 »

  1.   

    一个表有2个字段表结构如下
    packid(当前ID) packidtemp(上级ID)
    12               14
    14               15
    15怎么样获取当前ID对应的最高ID如果我传入一个12      我就要根据12找到他对应的packidtemp 在根据packidtemp获取到的值到packid中找是否存在,以此类推 。一直到packid对应的值为空,再把最后取到的packid放入临时表,也就是15
      

  2.   

    有那么麻烦么?
    你的packid是自增列吧
      

  3.   

    create table #temp(id int,parentid int)
    insert into #temp
    select 1,0 union all
    select 2,1 union all
    select 3,2 union all
    select 4,7 union all
    select 5,3 select * from #tempdeclare @resultID int
    declare @curID int
    set @curID=5
    while(exists(select 1 from #temp where id=@curID))
    begin
    select @curID=parentid,@resultID=id from #temp where id=@curID
    end
    select @curID,@resultID
      

  4.   


            int _PackID = 0;
            private void GetPackID(int packID, DataTable table)
            {
                foreach (DataRow drow in table.Rows)
                {
                    if (Convert.ToInt32(drow["packid"].ToString()) == packID)
                    {
                        if (Convert.ToInt32(drow["packidtemp"].ToString()) == 0)
                        {
                            _PackID = packID;
                        }
                        else
                        {
                            GetPackID(Convert.ToInt32(drow["packidtemp"].ToString()), table);
                        }
                    }
                }
            }        private void button2_Click(object sender, EventArgs e)
            {
                DataTable table = new DataTable();
                table.Columns.Add("packid");
                table.Columns.Add("packidtemp");
                table.Rows.Add(12, 14);
                table.Rows.Add(14, 15);
                table.Rows.Add(15, 0);             GetPackID(12, table);
                 Console.WriteLine(_PackID);
            }结果:
    15
      

  5.   

    递归方法改一下        private void GetPackID(int packID, DataTable table)
            {
                foreach (DataRow drow in table.Rows)
                {
                    if (Convert.ToInt32(drow["packid"].ToString()) == packID)
                    {
                        if (Convert.ToInt32(drow["packidtemp"].ToString()) == 0)
                        {
                            _PackID = packID;
                            return;  //退出
                        }
                        else
                        {
                            GetPackID(Convert.ToInt32(drow["packidtemp"].ToString()), table);
                        }
                    }
                }
            }
      

  6.   

    1.先将这个表的数据缓存到一个DataTable(变量为dt)中.
    2.软后开始递归
    public string GetTopId(string id,DataTable dt)
    {
        DataRow row = dt.select("packidtemp=" + id)
        if(row.length !=0 || row !=null)
           return GetTopId(row["packid"].toString(),dt);
        else 
           return id;
    }