如何在PHP MySQL中进行分页

时间:2013-02-07 19:14:42

标签: php mysql

我有一个数据库。当我获取数据时,它有很多行。我想打破这个结果。我阅读了很多关于分页的教程但不了解如何分页。 以下是我的代码 -

<?php
                if(isset($_GET['search_profile'])){
                $gender = $_GET['Gender'];
                $religion = $_GET['selected_religion'];
                $caste = $_GET['selected_caste'];
                $marital_status = $_GET['marital_status'];
                $lage = $_GET['lage'];
                $hage = $_GET['hage'];

                $current_date = date('Y');
                            $hage1 = date('Y') - $hage;
                //echo $hage1;
            //  echo "<br>";
                $lage1 = date('Y') - $lage;
                //echo $lage1;



                $qq = "SELECT * FROM members WHERE yyyy BETWEEN '$hage1' AND '$lage1' AND gender='$gender' 
                AND religion LIKE '%$religion%'
                AND caste LIKE '%$caste%'
                AND marital_status LIKE '%$marital_status%'";

$profile_query_result = mysql_query($qq, $dbc)
or die('Error1'.mysql_error());


                }
                ?>

3 个答案:

答案 0 :(得分:0)

您可以使用LIMIT关键字告诉MySQL要获取的记录数,并指定起始偏移量

 SELECT * 
   FROM members 
   WHERE yyyy BETWEEN '$hage1' AND '$lage1' 
     AND gender='$gender' 
     AND religion LIKE '%$religion%'
     AND caste LIKE '%$caste%'     
     AND marital_status LIKE '%$marital_status%'
  LIMIT 0,100

上面的SQL查询将返回前100条记录,从第一个

开始

如果您想要接下来的100个(即从记录#101开始的100个记录),那么您将使用LIMIT 100, 100;然后是下一个100 LIMIT 200,100等等..

当然,如果您希望从PHP控制页码,您可以使用参数而不是硬编码值,如下所示:

 SELECT * 
   FROM members 
   WHERE yyyy BETWEEN '$hage1' AND '$lage1' 
     AND gender='$gender' 
     AND religion LIKE '%$religion%'
     AND caste LIKE '%$caste%'     
     AND marital_status LIKE '%$marital_status%'
  LIMIT '$offset', '$recordsPerPage'

然后$ offset应该以$ recordsPerPage(即0,100,200,... n * 100)的增量取值,$ recordsPerPage可以是您希望在每个页面上显示的任何数量的记录(通常为10,20)或100)

答案 1 :(得分:0)

如果客户端分页不是问题,一个简单的解决方案是使用Jquery分页。您可以在 http://www.datatables.net/release-datatables/examples/basic_init/alt_pagination.html

上查看示例

在您的JavaScript代码中添加:

$(document).ready(function() {
    $('#example').dataTable( {
        "sPaginationType": "full_numbers"
    } );
} );

其中'example'是您的元素的ID。

答案 2 :(得分:0)

我前几天刚完成了我的第一个分页脚本。这并不难。老实说,我很乐意帮助你理解它的逻辑,但我不会为你编写代码 - 我也相信这个主题已经涵盖了这个主题,这可能是重复的。

你知道多少PHP?您的分页脚本背后的逻辑(假设数据来自数据库)是这样的:

您至少需要2次数据库查询 - 您的第一个查询将告诉您有多少结果,您的第二个查询将实际提供结果。

您需要一些变量 - 您需要知道项目数量。您还需要知道限制 - 即每页上可显示的项目数。您可以通过将限制除以项目数(项目数/每页限制数)来找到页数

显示HTML - 要创建分页的HTML,我使用了一系列if语句。有点像下面的伪代码:

if ( isset( $_GET['page'] ) ) {
       $page = preg_replace( '/[^0-9]/', '', $_GET['page'] );
}
else {
       $page = 1;
}


/* the following code will not work
   with the identity (===) operator 
   because when coming from get $page
is a string not an int */

if ( $current_page == 1 ) {

     $page2 = $page + 1;
     $page3 = $page + 2;
     $page4 = $page + 3;


     $pagination .= "<div>Pg $page</div>";

    // if theres a second page, display page 2
    if ( $num_of_posts > ( $limit * 1 ) ) {
         $pagination .= "<a>$page2 &gt;</a>";
    }

    // if there is a 3rd page
    if ( $num_of_posts > ( $limit * 2 ) ) {
         $pagination .= "<a>$page3 &gt;</a>";
    }

    // if there is a 4th page
    if ( $num_of_posts > ( $limit * 3 ) ) {
         $pagination .= "<a>$page4 &gt;</a>";
    }

    // if there is more than 4 pages
    if ( ($page4 != $last_page && $page3 != $last_page ) {
         $pagination .= "<a href='" . $last_page . "'>&gt; &gt;</a>";
    }
}

需要重复此过程。你重复多少完全取决于你。您可以将if / elseif语句重写为switch语句,我个人不在Web编程中使用switch语句。

你可以采用相同的方法($ page == 2),($ page == $ last_page),($ page ==($ last_page - 1)。你可以过火。这只是确保HTML如果只有一页或两页内容,则输出将是合适的。

第二个查询 - 第二个查询将从数据库中获取结果。限制将是(($ page - 1)* $ limit_per_page),$ limit_per_page

即:

 $limit = ( $page - 1) * $limit_per_page
   $sql= "SELECT post, user, id, etc, whatever
         FROM table
         WHERE this = that
         ORDER BY foobarz ASC[/DESC]
         LIMIT ".$limit.",".$limit_per_page;

我希望这足以让你解释它!祝好运!如果您需要更多解释,请告诉我们!