分页 在 MSSQL+ PHP 中不起作用


Pagination Not working in MSSQL+ PHP

我正在尝试在前端对我的数据库博客文章进行分页。

这是代码。

            <h2>Blogs</h2>
              <?php 
              $limite = 2;
              $pg = (isset($_GET['pg'])) ? (int)$_GET['pg'] : 1;
              $inicio = ($pg * $limite) - $limite;
              $lastRow = $inicio + $limite;
              $total = 0;
              include_once('includes/db-connect.php');
              $sql = "SELECT * FROM ( SELECT *, ROW_NUMBER() OVER (ORDER BY Pk_blog_id) as row FROM dbo.tb_IEAG_Blogs) a WHERE row between ".$inicio." and ".$lastRow.""; 
              $a2 = sqlsrv_query($conn,$sql);
              $sqlcounter = "SELECT Pk_blog_id,Blog_title,Blog_content FROM dbo.tb_IEAG_Blogs WHERE Is_archived = 0 ";
              $acounter = sqlsrv_query($conn,$sqlcounter);
              while ($result1 = sqlsrv_fetch_array($acounter)) {
                $totalintable++;
              }
            ?>
             <?php while($result = sqlsrv_fetch_array($a2)){ ?>
             <div class="media">
               <div class="media-body">
                 <h3 class="media-heading"><?php echo $result['Blog_title'];?></h3>
                 <p><i class="fa fa-calendar"></i><?php echo date('F d, Y',strtotime($result['Created_at']));?></p>
                 <p><?php echo substr($result['Blog_content'], 0, 280) . '...'; ?></p>
               </div>
               <a class="btn rm-blg" href="blog-details.php?pkid=<?php echo $result['Pk_blog_id'];?>">Read More</a>
             </div>
             <?php } ?>  

          <?php $qtdPag = ceil($totalintable/$limite); 
            if($qtdPag > 1 && $pg <= $qtdPag)
            {
              ?>
            <nav class="text-center">
              <ul class="pagination">
                <li>
                  <a href="#" aria-label="Previous" class="next">
                    <span ><img src="images/prev.png" alt=""></span> Previous
                  </a>
                </li>
                <?php 
                for($i = 1; $i <= $qtdPag; $i++)
                {
                  if($i == $pg){
                    echo "<li><a class='ative'>".$i."</a></li>";
                  } else {
                    echo "<li><a href='blog.php?pg=$i'>".$i."</a></li>";
                  }
                }
                ?>
                <li>
                  <a href="#" aria-label="Next" class="prevs"> Next
                    <span ><img src="images/next.png" alt=""></span>
                  </a>
                </li>
              </ul>
            </nav>  
            <?php } ?>

我正在获得分页链接,但这不正确。

我将每页限制为 2 篇博客文章。

表中的总行数为 6。

第一页运行良好,当转到第二页时,每页显示三条记录。

我该如何解决这个问题..

谢谢

我怀疑第一页上的最后一条记录显示为第二页上的第一条记录。这完全取决于您设置记录选择变量的方式 $inicio$lastRow .

如果我们是您进行计算,我们会得到以下结果:

+------+-------+-------+-----+
| Page | Limit | Start | End |
+------+-------+-------+-----+
|    1 |     2 |     0 |   2 |
|    2 |     2 |     2 |   4 |
|    3 |     2 |     4 |   6 |
+------+-------+-------+-----+

开始 = (page * limit) - limit ;结束 = (page * limit)
例如Start = (1 * 2) - 2 = 0 End = (1 * 2) = 2

结果

是,每页总共得到 3 个结果 - 开始和结束数字是包含的(第 2 页给出记录:2、3、4)。 第一页只有两条记录的原因是,记录编号 0 不存在,因为它从第 1 行开始

如果将变量更改为如下所示:

$inicio = (($pg - 1) * $limite) + 1;
$lastPage = ($pg * $limite);

您得到以下结果:

+------+-------+-------+-----+
| Page | Limit | Start | End |
+------+-------+-------+-----+
|    1 |     2 |     1 |   2 |
|    2 |     2 |     3 |   4 |
|    3 |     2 |     5 |   6 |
+------+-------+-------+-----+

例如Start = ((1 - 1) * 2) + 1 = 1 End = (1 * 2) = 2