首页 > 解决方案 > 显示具体编号 每页的行数?

问题描述

我想显示具体的编号。每页记录数?下面的代码用于分页。我正在尝试每页显示 2 条记录。它成功在第一页显示两条记录。问题开始在下一页发生。目前我有 10 条记录。它会像这样显示

第 1 页 = 2 条记录。

    +---+---------+------------------+-------+
    |No.| File ID | File Desc.       |Status |
    +---+---------+------------------+-------+
    |1  | 400/4   | 1 - Test 1 400/4 |       |
    +---+---------+------------------+-------+
    |2  | 400/1   | 5 - Test 5 400/1 |       |
    +---+---------+------------------+-------+

第 2 页 = 4 条记录(2 条记录 + 第 3 页的 2 条记录)

    +---+---------+------------------+-------+
    |No.| File ID | File Desc.       |Status |
    +---+---------+------------------+-------+
    |1  | 400/3   | 2 - Test 2 400/3 |       |
    +---+---------+------------------+-------+
    |2  | 400/3   | 1 - Test 1 400/3 |       |
    +---+---------+------------------+-------+
    |3  | 400/2   | 3 - Test 3 400/2 |       |
    +---+---------+------------------+-------+
    |4  | 400/2   | 2 - Test 2 400/2 |       |
    +---+---------+------------------+-------+

第 3 页 = 6 条记录(2 条记录 + 第 4 页的 2 条记录 + 第 5 页的 2 条记录)

    +---+---------+------------------+-------+
    |No.| File ID | File Desc.       |Status |
    +---+---------+------------------+-------+
    |1  | 400/2   | 3 - Test 3 400/2 |       |
    +---+---------+------------------+-------+
    |2  | 400/2   | 2 - Test 2 400/2 |       |
    +---+---------+------------------+-------+
    |3  | 400/2   | 1 - Test 1 400/2 |       |
    +---+---------+------------------+-------+
    |4  | 400/1   | 3 - Test 3 400/1 |       |
    +---+---------+------------------+-------+
    |5  | 400/1   | 2 - Test 2 400/1 |       |
    +---+---------+------------------+-------+
    |6  | 400/1   | 1 - Test 1 400/1 |       |
    +---+---------+------------------+-------+

第 4 页 = 4 条记录(2 条记录 + 第 5 页的 2 条记录)。

    +---+---------+------------------+-------+
    |No.| File ID | File Desc.       |Status |
    +---+---------+------------------+-------+
    |1  | 400/2   | 1 - Test 1 400/2 |       |
    +---+---------+------------------+-------+
    |2  | 400/1   | 3 - Test 3 400/1 |       |
    +---+---------+------------------+-------+
    |3  | 400/1   | 2 - Test 2 400/1 |       |
    +---+---------+------------------+-------+
    |4  | 400/1   | 1 - Test 1 400/1 |       |
    +---+---------+------------------+-------+

第 5 页 = 2 条记录。

    +---+---------+------------------+-------+
    |No.| File ID | File Desc.       |Status |
    +---+---------+------------------+-------+
    |1  | 400/1   | 2 - Test 2 400/1 |       |
    +---+---------+------------------+-------+
    |2  | 400/1   | 1 - Test 1 400/1 |       |
    +---+---------+------------------+-------+
$num_rows = mysqli_num_rows($query);

    $per_page = 2;   // Per Page
    $page  = 1;

    if(isset($_GET["Page"]))
    {
        $page = $_GET["Page"];
    }

    $prev_page = $page-1;
    $next_page = $page+1;

    $row_start = (($per_page*$page)-$per_page);
    if($num_rows<=$per_page)
    {
        $num_pages =1;
    }
    else if(($num_rows % $per_page)==0)
    {
        $num_pages =($num_rows/$per_page) ;
    }
    else
    {
        $num_pages =($num_rows/$per_page)+1;
        $num_pages = (int)$num_pages;
    }
    $row_end = $per_page * $page;
    if($row_end > $num_rows)
    {
        $row_end = $num_rows;
    }

下面是分页

Total <?php echo $num_rows;?> Record : <?php echo $num_pages;?> Page :
<?php
if($prev_page)
{
    echo " <a href='$_SERVER[SCRIPT_NAME]?Page=$prev_page&txtKeyword=$strKeyword&txtKeyword2=$strKeyword2'><< Back</a> ";

}

for($i=1; $i<=$num_pages; $i++){
    if($i != $page)
    {
        echo "[ <a href='$_SERVER[SCRIPT_NAME]?Page=$i&txtKeyword=$strKeyword&txtKeyword2=$strKeyword2'>$i</a> ]";

    }
    else
    {
        echo "<b> $i </b>";
    }
}
if($page!=$num_pages)
{
    echo " <a href ='$_SERVER[SCRIPT_NAME]?Page=$next_page&txtKeyword=$strKeyword&txtKeyword2=$strKeyword2'>Next>></a> ";

}
$dbConn = null;
?>

标签: phpmysql

解决方案


问题是您没有在 sql 查询中更新您的开始或偏移量。如果偏移量是正确的,它只会获取您需要的某些记录集。带有偏移量的 sql 查询示例:下面的 SQL 查询说“仅返回 2 条记录,从记录 1 (OFFSET 0) 开始”:

$page=0;
$per_page = 2;
$offset=$page*$per_page; //0

$sql = "SELECT * FROM Orders LIMIT 2 OFFSET 0";

当您单击下一页时,应更新开始/偏移量

$page=1;
$per_page = 2;
$offset=$page*$per_page; //2

$sql = "SELECT * FROM Orders LIMIT 2 OFFSET 2";

单击第三页代码将更新为

$page=2;
$per_page = 2;
$offset=$page*$per_page; //4

$sql = "SELECT * FROM Orders LIMIT 2 OFFSET 4";

等等...

所以 sql 语句应该如下所示:

$sql = "SELECT * FROM Orders LIMIT $per_page OFFSET $offset";

或者

您还可以使用更短的语法来获得相同的结果:

$sql = "SELECT * FROM Orders LIMIT $offset, $per_page"

推荐阅读