分页在MSSQL + PHP中不起作用

时间:2016-03-01 09:37:41

标签: php sql-server pagination

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

这是代码。

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

第一页工作正常,当进入第二页时,每页显示三条记录。

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

谢谢

1 个答案:

答案 0 :(得分:1)

我怀疑第一页上的 last 记录在第二页上显示为 first 记录。这完全取决于您设置记录选择变量$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 )。第一页只有两个记录的原因是因为从第1行开始,记录号0不存在。

如果您将变量更改为以下内容:

$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