排序 mysql 结果在 php 中分页

Sorting mysql results with pagination in php

大家早上好!

我一直在做一个小项目,我以为我已经完成了。所以,我有一堆页面,但我有一个页面有超过 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>

您只需调整 link 即可转到页面以将排序顺序作为 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>

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

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

下一页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>

以及排序 URL

<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>