没什么。设置字段ordering存放顺序号。
按ordering取出数据。
提交它的id,ordering,上一个id,上一个id的ordering,下一个id,下一个id的ordering

解决方案 »

  1.   

    不同意faisun(暖阳) 的说法,十几条记录你就操作的简单,几百条,几千条呢?我最初的想法是取两个记录出来,然后把他们的ORDER字段互换继续咨询
      

  2.   

    “在客户端先用 js 脚本上下移动,移好后再把结果提交到数据库”
    想法很好!!!
    测试例
    <form>
    <input type=submit>
    <table width="75%" border="1">
        <tr> 
          <td>ID</td>
          <td ondragstart="alert('s')">名称</td>
          <td ondragend="alert('e')">操作</td>
        </tr>
        <tr> 
          <td>1</td>
          <td>测试一</td>
          <td>[<span onClick="up(this)">上移</span>] [<span onClick="down(this)">下移</span>]<input type=text name=t[] value=1></td>
        </tr>
        <tr> 
          <td>2</td>
          <td>测试二</td>
          <td>[<span onClick="up(this)">上移</span>] [<span onClick="down(this)">下移</span>]<input type=text name=t[] value=2></td>
        </tr>
        <tr>
          <td>3</td>
          <td>测试三</td>
          <td>[<span onClick="up(this)">上移</span>] [<span onClick="down(this)">下移</span>]<input type=text name=t[] value=3></td>
        </tr>
      </table>
    </form><script>
    function up(o) { // 上移
      var el = o.parentElement.parentElement; // 获得TR对象
      var n = el.rowIndex; // 取得所在行
      if(n == 1) return; // 到顶不移,第一行不动
      do {
        el = el.parentElement;
      }while(el.parentElement.tagName != "TABLE"); // 上溯到TABLE
      el.moveRow(n-1,n); // 移动行
    }function down(o) { // 下移
      var el = o.parentElement.parentElement;
      var n = el.rowIndex;
      do {
        el = el.parentElement;
      }while(el.parentElement.tagName != "TABLE");
      if(n >= el.rows.length-1) return; // 到底不移
      el.moveRow(n,n+1);
    }
    </script>
      

  3.   

    看楼主的意思应该是新闻的管理后台吧?
    如果列表的条目是数据库中的记录的话,用js排完序只是在客户端有效,访问的时候显示的还是老样子,因为数据库没有变化。
    我认为还是需要用一个排序字段来实现。在读取记录的时候按照排序字段排序,并在循环的时候用两个变量分别保存上一条记录的id和排序字段的值,提交当前记录和上一条记录的id和排序字段值,在数据库内将这两条记录的排序字段互换。
      

  4.   

    xuzuning(唠叨): 那如果是记录要分页的情况下怎么处理呢?第二页的第一条记录上移的话,应该是移动到第一页的最后一条记录了...
      

  5.   

    呵呵,唠叨应该是白忙了。楼主应该问的是PHP程序代码。
      

  6.   

    我是这么处理的,发个代码片段给大家瞧瞧,本代码经过运行测试成功 case "up_1"; // $mylink=mysql_connect($dbhost,$dbuser,$dbpasswd);
    mysql_select_db($dbname,$mylink);
    $sql="select * from tb_menu where Menu_Layer=1 order by Menu_Order desc";
        $result = mysql_query($sql);    while ($row = mysql_fetch_array($result)) 
    {
    $arry[]=$row[0];
    $arry2[]=$row[6];
        }
    $Arraynum=count($arry);
    for($i=0;$i<$Arraynum;$i++)
    {
    if($arry[$i]==$Menu_Id) //$Menu_Id 是tb_menu主Id编号
    {
    $M_id1=$arry[$i];
    $M_o1=$arry2[$i];
    $M_id2=$arry[$i+1];
    $M_o2=$arry2[$i+1];
    }
    }

    $sql2 = "UPDATE tb_menu SET Menu_Order='$M_o2' where Id='$M_id1'";
    $result2=mysql_query($sql2);
    $sql3 = "UPDATE tb_menu SET Menu_Order='$M_o1' where Id='$M_id2'";
    $result3=mysql_query($sql3);
    if($result2==1 and $result3==1) echo "<script language=javascript>window.location.href='menu.php';</script>";
    else echo "<script language=javascript>alert('Failed Modify!');history.go(-1);</script>"; break;
    参数这么传递:<A href="menu.php?action=up_1&Menu_Id=<?php echo $myarray["Id"];?>">↑</a>
      

  7.   

    哈哈,我很快也要做这个,类似,一个题目排序程序(不过数量就很少,一般不过百)以前的做法是这样:取得所有相连要排序的记录
    客户端排序,然后提交全部update但现在觉得这方法不好,正在想其他办法
      

  8.   

    由于PHP自身的技术问题
    所以做这个排序感觉没有ASP来的容易我解释一下上面那段代码:
    将字段Id和Menu_Order的记录分两个数组读入
    然后根据当前提交的ID进行重新编号
    得到相邻的两个记录
    再将记录1和记录2的Menu_Order进行交换
    排序就成功了
      

  9.   

    我的想法表id int auto_increment...num int (排序ID)在添加文章的时候 得出当前ID然后 将当前ID的值插入排序ID num 中这样 在排序的时候 
    ↑ update table set num = num +1 where id='$id'
    ↓ update table set num = num -1 where id='$id'select * from table order by num desc 就可以了
      

  10.   

    刚学PHP 
    可以用JS来解决 就和ASP 一样