id Title   上升 下降
1  新闻1   ∧   ∨
2  新闻2   ∧   ∨
3  新闻3   ∧   ∨
4  新闻4   ∧   ∨请大家说下具体做法。谢谢

解决方案 »

  1.   

    给新闻的表里加一个SortID的字段,用来排序
    点击∧和∨时就把它的SortID和它的前一个OR后一个换一下,即一个SortID+1,一个SortID-1
    不过要记得保持sortid连续排列
      

  2.   

    <input id="btnMoveUP" onclick="moveUp(document.all['result'])" onmouseover="this.className='btnBlueOn'" onmouseout="this.className='btnBlue'" type="button" value="上移" class="btnBlue" style="width: 50px; height: 22px" />
    -----------------------------js
     function moveUp(e)
        {
            for (var i = 0; i < e.options.length; i++)
            {
                if (e.options[i].selected)
                {
                    if (i > 0)
                    {
                        var temp = new Option(e.options[i-1].text,e.options[i-1].value);
                        e.options[i-1].text = e.options[i].text;
                        e.options[i-1].value = e.options[i].value;
                        e.options[i].text = temp.text;
                        e.options[i].value = temp.value;
                        e.options[i].selected = false;
                        e.options[i-1].selected = true;
                    }
                }
            }
            document.all["ctl00$ContentPlaceHolder1$txtResult"].value = getText();
            document.all["ctl00_ContentPlaceHolder1_hfldFields"].value = getValue();
        }
    --------------------------------------下移动
    <input id="btnMoveDown" onclick="moveDown(document.all['result'])" onmouseover="this.className='btnBlueOn'" onmouseout="this.className='btnBlue'" type="button"
                                    value="下移" class="btnBlue" style="width: 50px; height: 22px" />
    --------------------------------------js
    function moveDown(e)
        {
            var flag = true;
            for (var i = 0; i < e.options.length; i++)
            {
                if (e.options[i].selected && flag)
                {
                    if (i < e.options.length - 1)
                    {
                        index = i;
                        var temp = new Option(e.options[i].text,e.options[i].value);
                        e.options[i].text = e.options[i+1].text;
                        e.options[i].value = e.options[i+1].value;
                        e.options[i+1].text = temp.text;
                        e.options[i+1].value = temp.value;
                        e.options[i].selected = false;
                        e.options[i+1].selected = true;
                        flag = false;
                    }
                }
            }
            
            document.all["ctl00$ContentPlaceHolder1$txtResult"].value = getText();
            document.all["ctl00_ContentPlaceHolder1_hfldFields"].value = getValue();
        }
      

  3.   


    SortID的值可以用新闻本身的主键ID来初始化,交换两个sortid就可以,这样就不用保证sortid的连续了
      

  4.   


    就是你说的这样做,就会怕中间删除了某一行,sortid就断了
    所以我实现新闻的这个功能的时候,我都是用个存储过程去保持sortid的连续
      

  5.   

    其实唯一要考虑的就是,删除时sortid不连续了,上下移时会有问题
    在删除时把sortid比它大的都减一就可以了
      

  6.   

    如果有sortid就不能保持连续了.你只用保持,添加的时候不重复,并且是唯一的
    .我有asp写的代码,你可以参考 //交换排序
        if (Request.Form("act") == "swaporder") {
                validateAdmin();
                var varOpt,varOrder,varNewsId;
                varOpt = Request.Form("opt").item;  //0 or 1 0向下,1相反
        varOrder = Request.Form("order").item;//排序值
        varNewsId = Request.Form("id").item; //操作的id
                var connStr,fconn,frecords;
        connStr=MDBCONNECTIONSTRING;
                var fconn = Server.CreateObject("adodb.connection");
                fconn.Open(connStr);
        var sql ,opt,order;
        order = " order by orderindex asc"
        opt = ">"
        if(varOpt == "0")
        {
            opt = "<";
            order = " order by orderindex desc";
        }
        sql = "select top 1 * from [news] where orderindex "+opt+varOrder+order;
        var rsreq = fconn.Execute(sql);
        
        if( rsreq.eof == true || rsreq.bof == true ){
            fconn.close();
            Response.End();
        }
        var tmpid, tmporder;
        tmpid = rsreq("id");
        tmporder = rsreq("orderindex");
        sql = "update [news]  set orderindex = " + varOrder + " where [ID] = " + tmpid;
        fconn.Execute(sql);
        sql = "update [news]  set orderindex = " + tmporder + " where [ID] = " + varNewsId;
        fconn.Execute(sql);
        fconn.close()
        Response.End();
    }
    添加的时候Function GetMaxOrder()
    dim connStr,fconn,frecords
        connStr=vbsConnectionString
                set fconn = Server.CreateObject("adodb.connection")
                fconn.Open connStr
                Dim rscount,flag
                flag = 1
                set rscount = fconn.Execute("select max(orderindex) from [news] ")
                if  isnull(rscount(0)) = true or isempty(rscount(0)) = true or  rscount(0) = "" then
                flag =1
            else 
                flag=rscount(0) +1 
            end if
            fconn.close
            GetMaxOrder = flag
    end function
      

  7.   


    1 3  7desc也可以。 排序根本不用边续的数字。。大哥
      

  8.   

    SortID的值可以用新闻本身的主键ID来初始化,交换两个sortid就可以,这样就不用保证sortid的连续了这个比较靠谱。。
      

  9.   

    你向下移就交换当前id与排在它下面的id的sortid既可
    向上移反之sortid不用连续,只需要不重复
      

  10.   

    增加一个排序的字段。
    添加数据的时候该字段=count(id)的值就好了排序的时候,就是更新上一条和下一条的排序值就可以了。其实可以不连续的。
      

  11.   

    恩,是的
    你取两个id这样判断,效果也一样,sortid可以不连续实现方法总数多种多样的啦
      

  12.   


    如果你哪天删了某些时效性的新闻,这样sortid就很难保证连续性
      

  13.   

    用 Javascript 直接交换表格行,排好后再按照表格行的顺序取出新闻 ID 就可以了。
      

  14.   


    不靠谱就是不靠谱。 本来不是靠asc和Desc能解决的问题