【问题标题】:Sorting mysql results with pagination in php在php中使用分页对mysql结果进行排序
【发布时间】:2015-05-26 21:40:24
【问题描述】:

大家早上好!

我一直在做一个小项目,我认为我已经完成了。所以,我有一堆页面,但我有一个有超过 100k 结果的 MYSQLi 查询,我认为不显示所有 100k+ 结果会很好,所以我在网站上添加了分页。我遇到的问题是,每当有人对页面进行排序并单击下一页时,排序就会消失。

在我写这篇文章的时候,我有点想通了,但这是我的代码:

$sort = "id";
    if(isset($_GET['sort'])) {
        switch ($_GET['sort'] ) { 

        case 0:
                    $sort = 'id';
                    break;
        case 1:
                    $sort = 'priority DESC';
                    break;
        case 2:
                    $sort = 't_name'; 
                    break;  
        case 3:
                    $sort = 'loc'; 
                    break;
        case 4:
                    $sort = 'w_req';
                    break;
        case 5:
                    $sort = 'tel';
                    break;
        case 6:
                    $sort = 'maint_user';
                    break;
        }
    }

        // pagination
        $total_results = mysqli_num_rows(mysqli_query($mysqli,"SELECT w_status FROM w_o WHERE (w_status = 'active' OR w_status = 'open') ORDER BY $sort"));

        if(!isset($page_number))
            $page_number = (int)$_GET['page'] <= 0 ? 1 : (int)$_GET['page']; // grab the page number

            $perpage = 15; // number of elements perpage


        if($page_number > ceil($total_results/$perpage))
            $page_number = ceil($total_results/$perpage);


        $start = ($page_number - 1) * $perpage;

        $result = mysqli_query($mysqli,"SELECT * FROM w_o WHERE (w_status = 'active' OR w_status = 'open') ORDER BY $sort LIMIT $start, $perpage");

我认为我的问题是 $sort="id";每次单击下一步时, $sort 都会重置为 = "id" 所以我在想,也许在分页代码中包含 $sort ?我很感激我能得到的任何帮助。谢谢你:)

这是html:

<form action="re_assign_a.php" method="post" name="view_order">    

  <table border="0" width="100%">
    <tr>
        <td align="left"><a href="<?php echo $_SERVER['PHP_SELF'] . "?page=".($page_number-1)."'";?>" class="button_s">Previous</a></td>
        <td align="right"><a href="<?php echo $_SERVER['PHP_SELF'] . "?page=".($page_number+1)."'";?>" class="button_s">Next</a></td>
    </tr>
  </table>
  <br>           
  <table border='2' style='width: 100%; margin: auto; border-width: 1px'>
    <tr>
        <th><a href="<?php echo $_SERVER['PHP_SELF'] . "?sort=0";?>" title="Click to sort by order number." class="tooltip"><span title="More">Order #</span></a></th>
        <th><a href="<?php echo $_SERVER['PHP_SELF'] . "?sort=1";?>" title="Click to sort by Priority." class="tooltip"><span title="More">Priority</span></a></th>
        <th><a href="<?php echo $_SERVER['PHP_SELF'] . "?sort=2";?>" title="Click to sort by Tenant Name." class="tooltip"><span title="More">Tenant Name</span></a></th>
        <th><a href="<?php echo $_SERVER['PHP_SELF'] . "?sort=3";?>" title="Click to sort by Apartment/Location" class="tooltip"><span title="More">Apartment</span></a></th>
        <th><a href="<?php echo $_SERVER['PHP_SELF'] . "?sort=4";?>" title="Click to sort by Work Requested" class="tooltip"><span title="More">Work Requested</span></a></th>
        <th><a href="<?php echo $_SERVER['PHP_SELF'] . "?sort=5";?>" title="Click here to sort by Phone Number" class="tooltip"><span title="More">Resident Phone #</span></a></th>
        <th><a href="<?php echo $_SERVER['PHP_SELF'] . "?sort=6";?>" title="Click to sort by a good date to perform work" class="tooltip"><span title="More">Assigned to</span></a></th>
        <th>Check to Re-Assign</th>
    </tr>

 <?php

 $i = 0;
 while($row = mysqli_fetch_array($result))
    {
        $test_id = $row['id'];
        echo "<tr class='table_work'>";
        echo "<td align='center'><a href='one_order.php?id=$test_id'>" . $row['id'] . "</td>";
        echo
       "<td align='center'><a href='one_order.php?id=$test_id'>"; 
       if ($row['priority'] == '1') { echo "<div class='priority1'>&nbsp;</div>"; } elseif ($row['priority'] == '2') { echo "<div class='priority2'>&nbsp;</div>"; } elseif ($row['priority'] == '3') { echo "<div class='priority3'>&nbsp;</div>"; };
       echo "</a></td>
        <td align='center'><a href='one_order.php?id=$test_id'>"; echo custom_echo1 ($row['t_name']); echo "</a></td>
        <td align='center'><a href='one_order.php?id=$test_id'>"; echo custom_echo1 ($row['loc']); echo "</a></td>
        <td align='center'><a href='one_order.php?id=$test_id'>"; echo custom_echo($row['w_req']); echo "</a></td>";
        echo "<td align='center'><a href='one_order.php?id=$test_id'>"; echo custom_echo2($row['tel']); echo "</a></td>";
        echo "<td align='center'><a href='one_order.php?id=$test_id'>" . $row['maint_user'] . "</a></td>";
        echo "<td align='center'><input name='assign[$i]' type='checkbox' value='" . $row['id'] . "' ></td>";
        ++$i;
    }



 ?>

   </table><br>
   <table border="0" width="100%">
   <tr>
   <td align="left"><a href="<?php echo $_SERVER['PHP_SELF'] . "?page=".($page_number-1)."'";?>" class="button_s">Previous</a></td>
   <td align="right"><a href="<?php echo $_SERVER['PHP_SELF'] . "?page=".($page_number+1)."'";?>" class="button_s">Next</a></td>
   </tr>
   </table>

【问题讨论】:

  • 早上好。你遇到了什么错误?
  • 没有错误,只是当有人对页面进行排序并单击下一页时,无论他们应用什么排序,它都会按 id 对其进行排序。
  • 能给个html代码吗?您是否考虑过永久存储排序类型(会话、cookie 等)?
  • 必须在每个站点设置 $_GET['sort']。当您转到下一个站点时,您需要 URL 中的排序变量。
  • 是的,您需要通过排序选项来获取下一个请求。

标签: php sorting mysqli pagination


【解决方案1】:

您只需要调整您的链接以进入页面以将排序顺序作为 GET 参数包含在内。将 GET 参数存储为默认为零的变量

$sortOrder = $_GET['sort'] ? : 0;

<td align="left"><a href="<?php echo $_SERVER['PHP_SELF'] . "?page=".($page_number-1)."&sort=$sortOrder'";?>" class="button_s">Previous</a></td>
<td align="right"><a href="<?php echo $_SERVER['PHP_SELF'] . "?page=".($page_number+1)."&sort=$sortOrder'";?>" class="button_s">Next</a></td>

现在,当单击下一页或上一页链接时,页码和排序顺序将传递给服务器。

【讨论】:

  • 这不起作用:(它仍然只是默认按ID排序。
  • @salimagic 如果它按 id 排序,那么这意味着您从未使用 get 将真正的排序值传递给查询。转储$_GET['sort'] 的值以确认传递的值正确。
  • 我认为这与 $sort='id' 一开始的事实有关。因此,当它刷新时,它只是将 $sort 更改为 id。它传递的是 case # 而不是实际的排序依据。
  • 您需要将参数设置为正在使用的数字而不是字符串。将排序顺序存储为单独的变量。 $sort 是您的列的字符串,但您需要一个数字。
【解决方案2】:

您必须在 HTML 中扩展 URL。这是一个快速而肮脏的解决方案!您必须正确定义代码中的变量。

下一页网址

<td align="left"><a href="<?php echo $_SERVER['PHP_SELF'] . "?page=".($page_number-1)."&sort=$sort'";?>" class="button_s">Previous</a></td>
<td align="right"><a href="<?php echo $_SERVER['PHP_SELF'] . "?page=".($page_number+1)."&sort=$sort'";?>" class="button_s">Next</a></td>

以及排序网址

<th><a href="<?php echo $_SERVER['PHP_SELF'] . "?sort=0&page=$page";?>" title="Click to sort by order number." class="tooltip"><span title="More">Order #</span></a></th>

【讨论】:

    猜你喜欢
    • 2011-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-14
    • 1970-01-01
    • 2012-07-28
    • 1970-01-01
    相关资源
    最近更新 更多