PHP分页单sql查询

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (144)

我试图用单个php sql查询归档分页,因为我觉得它太多运行一个select语句两次因为我想分页我的数据我已经尝试了查询功能 (*)count

我试过设置一个限制,如果number_of_rows它等于我的限制我自动分页这适用于两个页面,但我不能确定到第三页所以它不是一个好方法。

另一种我想到的方法是获取所有数据,然后使用java脚本分页,但我不知道如何做到这一点,所以我试图用PHP做,但我想学习如何使用java脚本,如果可能的话。

我只想运行一个查询和分页感谢您的帮助

这是我的代码:

   <?php
    //count rows in table
    $query= "SELECT * FROM $database.$table WHERE `id` <> '$id'";
    $result= mysqli_query($conn, ($query));

    $results_per_page =30;

    //calculate total pages
    if($result)
    {
        $num_row = mysqli_num_rows($result);
        mysqli_free_result($result);
        $total_pages = ceil($num_row / $results_per_page);
    }   

    //to get page value
    if(isset($_GET["page"])){ 
        $page =$_GET["page"]; 
    } else{ 
        $page=1; 
    };
    $start_from = ($page-1) * $results_per_page;
    $start_from_here = mysqli_real_escape_string($conn, stripslashes($start_from));
    $start_from_here = filter_var($start_from_here, FILTER_SANITIZE_NUMBER_INT );

    //get data to display
    $query1= " SELECT * FROM $database.$table 
                WHERE `id` <> '$id' 
                ORDER BY type ASC 
                LIMIT $results_per_page OFFSET $start_from_here  ";
    $result1= mysqli_query($conn, ($query1));

我的html分页代码是这样的

<?php
    if(isset($total_pages) && ($total_pages>1)) {   
        $url="http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
        $url=strtok($url, '?');

        for ($i=1; $i<=$total_pages; $i++) {   
        //Print links for all pages
            echo "<a class='pagination' href='".$url."?page=".$i."'>".$i."</a>";
        }
    }
    ?>

谢谢你的帮助

提问于
用户回答回答于

由于您的第一个查询仅查找行数,因此您可以通过选择行数来优化此行。

$query= "SELECT COUNT(*) FROM $database.$table WHERE `id` <> '$id'";

这样SQL服务器只返回行数,而不是匹配的行。

编辑

您还可以加载整个数据并将其存储在会话变量中。这样,您只需加载一次数据,并且无需其他查询即可显示相关部分。

用户回答回答于

无法在单个查询中执行这两项操作。您可以通过执行a来优化聚合

SELECT COUNT(1) AS row_count
FROM database.table_name
WHERE `id` <> YOUR_ID_HERE

然后,您可以使用row_count变量执行有关总页数和限制的所有计算。

扫码关注云+社区

领取腾讯云代金券