【问题标题】:Basic pagination基本分页
【发布时间】:2011-06-27 04:16:20
【问题描述】:

我不是一个精通的程序员,所以我不想使用复杂的分页。有没有像在我的查询中那样使用分页的替代方法,我可以将它们限制为 20 个结果,然后如果它们超过 20 个结果,我可以显示“下一个”按钮,然后该按钮将进一步加载下一个结果?

我只想“下一个”显示是否有 20> 个结果?任何帮助将不胜感激。谢谢。

代码:

  $query="SELECT * FROM actresses where actress_id = '$actressid' and production_full_name LIKE '%$q%'";  
       $result=mysql_query($query);

        $num=mysql_numrows($result);

        mysql_close();

          echo "";

       $i=0;
         while ($i < $num) {

         $1=mysql_result($result,$i,"production_full_name");
           $2=mysql_result($result,$i,"production_id");
     $3=mysql_result($result,$i,"actress");


          echo "<br><div id=linkcontain><a id=slink   href=$data/actress.php?id=$2>$3</a><div id=production>$1</div></div>";

            echo "";

            $i++;
            }

【问题讨论】:

  • 您需要展示一些代码,否则我们无法提供帮助。
  • @zzzzBov 代码已添加。
  • 附带说明,您在每个循环中重复使用 &lt;div&gt;&lt;a&gt; 标签上的 id

标签: php mysql pagination limit


【解决方案1】:

你可以在谷歌上找到很多例子。 以http://www.php-mysql-tutorial.com/wikis/php-tutorial/paging-using-php.aspx 为例。

您只需编辑 $rowsPerPage 即可获得结果数量,如果您想进一步编辑从数据库中获取的内容,请使用 $query

不过,包含不是必需的。

edit:注意使用 $_GET 的含义,这将对数据库查询产生影响。您必须小心不要在其中包含危险值(mysql injection)。在网页的例子中,它使用了ceil,所以我相信它会为非数值输出0,这样比较安全。

【讨论】:

    【解决方案2】:

    您可以使用 PEAR 包。 与框架类似,它们更易于使用。 但在使用它们之前,您需要检查 PEAR 是否在您的服务器上工作。 如果您在本地使用它,那么有一些步骤可以在本地机器上安装 PEAR 包。有关安装 PEAR 的更多说明。 Click here查看安装步骤。

    安装 PEAR 包后,请按照说明配置 PAGER 类。http://www.codediesel.com/php/simple-pagination-in-php/

    J

    【讨论】:

      【解决方案3】:

      类似的东西:

      $data = mysql_query("SELECT * FROM `table`");
      $total_data = mysql_num_rows($data);
      
      $step = 30;
      $from = $_GET['p'];
      
      $data = mysql_query("SELECT * FROM `table` LIMIT '.$from.','.$step.'"
      

      并创建链接:

      $p=1;
      for ($j = 0 ; $j <= $total_data+$step; $j+=$step) 
      { 
          echo ' <a href="page.php?p='.$j.'">'.$p.'</a> '; 
          $p++;
      
      } ?>
      

      未测试。

      【讨论】:

        【解决方案4】:

        您可以为查询添加限制。

        $lower_limit = $results_per_page * $page_number;
        $upper_limit = $lower_limit + $results_per_page
        
        ..and production_full_name LIKE '%$q%' LIMIT $lower_limit, $upper_limit
        

        然后做一个有条件的“下一页”链接

        if ($upper_limit > 20) echo '<a href="{page url}?page_number='.($page_number+1).'">Next</a>;
        

        【讨论】:

        • 我不确定这是否能正常工作。你的上限是错误的。 LIMIT 有两个参数,第一个参数指定要返回的第一行的偏移量,第二个指定要返回的最大行数。 Source: MySQL page. 这样的事情是正确的:$lower_limit = ($results_per_page * $page_number) - $results_per_page; $upper_limit = $results_per_page;
        • @tastro 我想如果您从第 0 页或第 1 页开始,这很重要,但您是对的。如果您假设第 1 页应该包含第 1..n 行,那么您必须从上限和下限中减去 n。
        【解决方案5】:

        您可以做的是获取COUNT(*) 来了解您的数据集中有多少行。然后决定每页需要多少个项目。 $numberOfRows / $itemsPerPage 为您提供页数。在 MySQL 中,为了限制结果,您使用 LIMIT X, Y X 是范围的开头,Y 是您要获取的项目数。因此,要获取页面上的所有项目,您的查询将是 LIMIT ($currentPage * $itemsPerPage), $itemsPerPage 然后由您决定,具体取决于您希望如何格式化分页,来编写视图逻辑。只需从后向前:如果当前页面为 1,则禁用上一个按钮。如果 page 不是 1,那么当前页码是从开始的页数。如果总页数大于当前页,则从当前页开始计数,直到最后一页(除非你想在某个时候切断页数)

        我使用以下方法来协助创建页面列表,不管是什么方向。我可以为当前页面插入 5,并为目标页面插入 0,它会返回一个包含 5 个页面的列表供我按顺序遍历。

        /*
         * Generates a list of pages based on the current page to the goal page number
         */
        function generatePageList($currentPage, $goal) {
            $span = $goal - $currentPage;
            $step = abs($span) / $span;
            $list = array();
        
            for($x = $currentPage; $x !== $goal;) {
                // We want to add the step at the beginning of the loop, instead of 
                // at the end
                // Fixes bug when there are only two pages
                $x += $step;
                $list[] = $x;
            }
        
            return $list;
        
        }
        

        【讨论】:

          【解决方案6】:

          如果您的查询设置为

          "SELECT SQL_CALC_FOUND_ROWS * FROM actresses where actress_id = '$actressid' and production_full_name LIKE '%$q%' LIMIT ".($page*$lpage).",".$lpage
          

          ...下一条语句可以SELECT FOUND_ROWS()得到实际结果个数。 不要忘记将mysql_real_escape_string() 放在这些变量上。

          切勿将SELECT * 与mysql_num_rows 一起使用;如果是大桌子,会浪费很多时间。

          【讨论】:

            【解决方案7】:

            这是创建数据分页的更简单方法

            <?php
                require_once 'db_connect.php';
            
                $limit = 20;  
                if (isset($_GET["page"])) { $page  = $_GET["page"]; } else { $page=1; };  
                $start_from = ($page-1) * $limit;  
            
                $sql = "SELECT * FROM employee ORDER BY id ASC LIMIT $start_from, $limit";  
                $rs_result = mysqli_query($con, $sql);  
            ?>
            
            
            <table class="table table-bordered">  
                    <thead>  
                        <tr>  
                            <th>Name</th>  
                            <th>Salary</th>
                            <th>Age</th>  
                        </tr>  
                    </thead>  
                        <tbody>  
                            <?php  
                                while ($row = mysqli_fetch_assoc($rs_result)) {?>  
                                    <tr>  
                                        <td><?php echo $row["employee_name"]; ?></td>  
                                        <td><?php echo $row["employee_salary"]; ?></td>  
                                        <td><?php echo $row["employee_age"]; ?></td>  
                                    </tr>  
                                    <?php  
                                };  
                            ?>  
                        </tbody>  
            </table>
            
            
            
            <?php  
                    $sql = "SELECT COUNT(id) FROM employee";  
                    $rs_result = mysqli_query($con, $sql);  
                    $row = mysqli_fetch_row($rs_result);  
                    $total_records = $row[0];  
                    $total_pages = ceil($total_records / $limit);  
                    $pagLink = "<nav><ul class='pagination'>";  
                    for ($i=1; $i<=$total_pages; $i++){  
                        $pagLink .= "<li><a href='index.php?page=".$i."'>".$i."</a></li>";  
                    };  
                    echo $pagLink . "</ul></nav>";  
            ?>
            
            
            <script type="text/javascript">
                $(document).ready(function(){
                    $('.pagination').pagination({
                        items: <?php echo $total_records;?>,
                        itemsOnPage: <?php echo $limit;?>,
                        cssStyle: 'light-theme',
                        currentPage : <?php echo $page;?>,
                        hrefTextPrefix : 'index.php?page='
                    });
                });
            </script>
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2020-05-05
              • 1970-01-01
              • 2011-07-29
              • 2023-02-23
              • 2012-07-30
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多