求一个php的上下排序 包括带分页就好比一个新闻列表:id  sort_id     操作1    1          向下
-------------------------
2    5      向上 | 向下
-------------------------
3    8      向上 | 向下
-------------------------
4    10     向上 | 向下
-------------------------
6    58     向上 | 向下
-------------------------
6    58         向下
-------------------------
共3页 现第一页 首页 上一页 下一页 末页 
我的数据库只要两个字段. 但是数据可能有几百条
所以我希望分页的时候也能处理好好上下排序.

解决方案 »

  1.   


    以前写的改的,可能有些乱define('PAGESIZE',5);
    if(isset($_GET['page']))
    $page=$_GET['page'];
    else 
    $page=1;

    if(isset($_GET['order']))
    $order=$_GET['order'];
    else 
    $order=1;$conn=mysql_connect("192.168.1.2","db_user","db_pass");
    mysql_select_db("chushandb");
    mysql_query("set names gb2312");
    $r=mysql_query("select count(*) as recordnum from table");
    $p=mysql_fetch_array($r);
    $totalpage=intval(($p['recordnum']+PAGESIZE-1)/PAGESIZE);
    $result=mysql_query("select * from table order by id ".($order == 1? "asc": "desc")." limit ".($page-1)*PAGESIZE.",".PAGESIZE);echo "<form>";
    if($page>1)
    {
    ?>
    <a href="?order=1<?php if($page)echo '&page='.$page ?>">上排序</a>
    <a href="?order=2<?php if($page)echo '&page='.$page ?>">下排序</a>
    <a href="?page=1<?php if($order)echo '&order='.$order ?>">首页</a>
    <a href="?page=<?php echo $page-1;?><?php if($order)echo '&order='.$order ?>">上一页</a>
    <?php
    }
    if($page<$totalpage)
    {
    ?>
    <a href="?order=1<?php if($page)echo '&page='.$page ?>">上排序</a>
    <a href="?order=2<?php if($page)echo '&page='.$page ?>">下排序</a>
    <a href="?page=<?php echo $page+1;?><?php if($order)echo '&order='.$order ?>">下一页</a>
    <a href="?page=<?php echo $totalpage;?><?php if($order)echo '&order='.$order ?>">尾页</a>
    <?php
    }
    ?>
    转到:
    <input type=text name=page size="2">
    <?php
    echo "总记录:$p[recordnum]当前页$page/$totalpage&nbsp;</form>";
    ?>
    <?php
    echo "<table border=1><tr>";
    while($field=mysql_fetch_assoc($result))
    {
    echo "<td><b><i>".$field['id']."</i></b></td>";
    }
    echo "</tr>";while($row=mysql_fetch_array($result))
    {
    echo "<tr><td>".$row['id']."</td><td>".$row['name']."</td><td>".$row['name']."</td></tr>";
    }
    echo "</table>";
    echo "<form>";
    if($page>1)
    {
    ?><a href="?order=1<?php if($page)echo '&page='.$page ?>">上排序</a>
    <a href="?order=2<?php if($page)echo '&page='.$page ?>">下排序</a>
    <a href="?page=1<?php if($order)echo '&order='.$order ?>">首页</a>
    <a href="?page=<?php echo $page-1;?><?php if($order)echo '&order='.$order ?>">上一页</a>
    <?php
    }
    if($page<$totalpage)
    {
    ?>
    <a href="?order=1<?php if($page)echo '&page='.$page ?>">上排序</a>
    <a href="?order=2<?php if($page)echo '&page='.$page ?>">下排序</a>
    <a href="?page=<?php echo $page+1;?><?php if($order)echo '&order='.$order ?>">下一页</a>
    <a href="?page=<?php echo $totalpage;?><?php if($order)echo '&order='.$order ?>">尾页</a>
    <?php
    }
    ?>
    转到:
    <input type=text name=page size="2">
    <?php
    echo "总记录:$p[recordnum]当前页$page/$totalpage&nbsp;</form>";?>
      

  2.   

    你误会我的意思了...
    我的意思是说: 
    一个表格
    id   sort_id    操作
    =====================
    1     2        向下
    ---------------------
    2     3       向上 向下
    ---------------------
    3     4       向上 向下
    ---------------------
    1     5         向下
    ---------------------
    共几页/第几页 上一页 下一页 ...我要做的是向下 向上的按钮排序....但是如果分页了就实现不到了...
      

  3.   

    点向上 将当前的sort_id 与上个sort_id 进行调换
    点向下 将当前的sort_id 与下个sort_id 进行调换
    向上向下链接上还要加上当前page的变量 点击之后仍然是在第page页
      

  4.   

    再加个listorder字段。listorder默认等于id的值。然后在前端页面,查数据按listorder排序,点向上,对应的条目就与其上面的条目交换listorder的值。点向下,对应的条目就与其下面的条目交换listorder的值。
      

  5.   


    为什么换页不起作用?这样做的上下移动换页一样有效。因为你每点一次上下移动,取出的数据是经过重新排序的,所以跟翻页没有关系。id title listorder
    1  测试1  1
    2  测试2  2
    3  测试3  3
    4  测试4  4
    看上表,假如我第一页只显示前三条数据,order by listorder asc limit 0,3,取出来的数据肯定是:id title listorder
    1  测试1  1
    2  测试2  2
    3  测试3  3现在我让第三条数据下移,需要做的就是将"测试3"这条数据与"测试4"这条数据的listorder值交换。变成了这样:id title listorder
    1  测试1  1
    2  测试2  2
    3  测试3  4
    4  测试4  3
    此时order by listorder asc limit 0,3查出来的数据就是id title listorder
    1  测试1  1
    2  测试2  2
    3  测试3  4
      

  6.   

    page=1,且循环=1,那就是第一页的第一个,就只显示向下。
    page=pagecount,且循环=最后一页的记录数,那就是最后一页的最后一个,就下显示向上。向上:
    "update tablename set `sort_id`=`sort_id`+1 where sort_id='".($sort_id-1)."'";
    "update tablename set `sort_id`=`sort_id`-1 where id='$id'";向下:
    "update tablename set `sort_id`=`sort_id`-1 where sort_id='".($sort_id+1)."'";
    "update tablename set `sort_id`=`sort_id`+1 where id='$id'";
    在程序里,不论你做什么操作:添加,删除,修改,只要sort_id发生了改变,那你都要更新对应的需要更新sort_id的记录
      

  7.   

    置頂
    "update tablename set `sort_id`=`sort_id`+1 where sort_id>='1'";
    "update tablename set `sort_id`='1' where id='$id'";