good way is to redesign the db schema. 
add two field as follows:
 id , parentidin oracle using connected by ... start with can query the outcome of what you wanted

解决方案 »

  1.   

    //可用下面的js,建议在服务器端(java)写。//id:表的序号字段,如1.2.1
    //函数返回该序号对应的级别(其实是数里边有多少个点)。0表示最高一级。
    function getLevel(id)
    {
      return id.replace(/[^\.]/g,"").length;
    }//得到某级别缩进的空格字串(每下一级缩两个空格)
    function getIndent(level)
    {
      var str = "";
      for(var i=0;i<level;i++)
        str+= "&nbsp;&nbsp;";
      return str;
    }
    var cArr = ['一','二',...'九','十','百','千'];
    //根据阿拉伯数字得到汉字数字
    function getCNum(eNum)
    {
    //太复杂了,本来想写一个的,网上肯定有。
    }//根据数据库中的序号得到用来显示的序号字符
    function getIdShow(id)
    {
    //取最后一个点号后面的部分,作为显示依据
    var sIndex = id.lastIndexOf(",");
    var s = id.substr(sIdnex+1); //碰巧找不到的情况也可这么写
    var level = getLevel(id);
    switch(level):
    {
    0:s=getCNum(s);break;
    1:s="("+getCNum(s)+")";break;
    2:s=s;break; // ~@~
    3:s="("+s+")";break;
    }
    //缩进
    s = getIndent(level) + s;
    return s;
    }//根据级别得到要显示的名称
    function getNameShow(level,name)
    {
    return getIndent(level) + name;
    }服务器端用java实现上述函数的话,大致在需要输出的地方<%=getIdShow(id)%>和<%=getNameShow(level,name)%>就成。---以上都没试过...
      

  2.   

    var cArr = ['零','一','二','三','四','五','六','七','八','九'] ;
    var cL = ["","十","百","千"]//千以内有效
    function getCNum(eNum)
    {
    var s="";
    var pre="";
    var len = eNum.length;
    for(var i=0;i<len;i++)
    {
    var value = parseInt(eNum.charAt(i));
    if(i==len-2 && value==1 && len==2)
    c = "十";
    else if(pre=="零" &&value==0)
    c= "";
    else if(pre!="零" &&value==0 &&i!=len-1 )
    c="零";
    else if(value==0 &&i==len-1)
    c="";
    else
    c = cArr[value]+cL[len-1-i];
    s += c;
    pre = c;
    }

    if(s.charAt(s.length-1)=="零")s=s.substring(0,s.length-1);
    return s;
    }alert(getCNum("034"));困死了,没意思...