이 기사를 읽기 전에 PHP에 대한 지식과 MYSQL 쿼리 작업의 기본 사항을 숙지했는지 확인하세요.
웹 프로그램으로서 회원 데이터, 기사 데이터 등 수많은 데이터를 처리해야 하는 경우가 많습니다. 회원 수가 수십 명 정도라면 한 페이지에 표시하기 쉽습니다. 하지만 만약 귀하의 웹사이트에 수천, 심지어 수십만 명의 회원이 있다면, 그것들이 모두 한 페이지에 열리면 브라우저와 시청자 모두에게 고문이 될 것입니다. 게다가 수억 개의 데이터가 있다면, 데이터베이스에서 한 번 쿼리하면 서버에 부담이 가해지며 이는 올바른 방법이 아닙니다.
PHP를 처음 배우시는 분들이라면 페이지네이션 때문에 머리 아플 거라 생각하는데, 모모님의 글을 보면 '야, 페이지네이션이 이렇게 간단하구나?'라며 고개를 끄덕이게 되실 겁니다. 실제로, 지금 신선한 공기를 깊게 들이쉬고 Silence가 조금씩 설명하는 것을 주의 깊게 들어보시기 바랍니다.
1000개의 데이터를 처리하여 각 페이지에 10개의 정보를 표시한다고 가정해 보겠습니다. 이 경우 먼저 mysql에서 10개의 정보를 추출하는 방법을 살펴보겠습니다. .
Select * from table limit 0,10
위는 table이라는 테이블에서 10개의 데이터를 추출하고 모든 필드의 값을 얻는 매우 간단한 mysql 쿼리문입니다. Limit 0,10의 사용법은 다음과 같습니다. 시작점 제한, 추출할 양
핵심 부분은 이 단락 "limit 0,10"에 있습니다. 여기서 0은 시작점이고 10은 시작점입니다. 10개의 데이터를 표시하므로 10을 시작점으로 사용해야 합니다. 20번째 데이터를 어떻게 작성해야 할까요?
대놓고 "10,20개 제한"이라고 말씀하시는 분들이 많을 텐데요! 아, 틀렸습니다. 정확한 표기법은 "limit 10,10" 입니다. 그 뒤의 매개변수는 끝점이 아니라 추출되는 숫자입니다.
이제 10개의 데이터를 추출하는 방법을 알았으니 1,000개의 데이터를 추출한다는 것은 이런 쿼리를 100번 수행한다는 의미이며, 이는 다음 쿼리를 수행해야 함을 의미합니다.
0,10으로 제한 .페이지
10,10으로 제한 ~ 예, 첫 번째 매개변수는 페이지를 넘길 때마다 10씩 증가하지만 두 번째 매개변수는 변경되지 않습니다.
즉, 페이지 수에 따라 첫 번째 매개변수의 값을 변경하려고 하면 데이터를 페이지 단위로 표시할 수 있다는 원리가 아주 간단하죠?
그런데 페이지 수에 따라 첫 번째 매개변수의 값을 어떻게 변경하나요? 먼저 URL의 GET 메소드를 사용하여 얻을 수 있는 페이지 번호 값이 필요합니다.
예를 들어, index.php?page=18
이런 종류의 URL 주소는 어디에서나 찾을 수 있습니다. 페이지 매개변수의 기능은 다음과 같습니다. 표시할 페이지.
코드를 통해 어떻게 구현되는지 살펴보겠습니다.
<?php /* Author:默默 Date :2006-12-03 */ $page=isset($_GET['page'])?intval($_GET['page']):1; //这句就是获取page=18中的page的值,假如不存在page,那么页数就是1。 $num=10; //每页显示10条数据 $db=mysql_connect("host","name","pass"); //创建数据库连接 $select=mysql_select_db("db",$db); //选择要操作的数据库 /* 首先咱们要获取数据库中到底有多少数据,才能判断具体要分多少页,总页数 具体的公式就是 总数据数 除以 每页显示的条数,有余进一 。 也就是说10/3=3.3333=4 有余数就要进一。 */ $total=mysql_num_rows(mysql_query("select * from table")); //查询数据的总数total $pagenum=ceil($total/$num); //获得总页数 pagenum //假如传入的页数参数apge 大于总页数 pagenum,则显示错误信息 If($page>$pagenum || $page == 0){ Echo "Error : Can Not Found The page ."; Exit; } $offset=($page-1)*$num; //获取limit的第一个参数的值 offset ,假如第一页则为(1-1)*10=0,第二页为(2-1)*10=10。 (传入的页数-1) * 每页的数据 得到limit第一个参数的值 $info=mysql_query("select * from table limit $offset,$num "); //获取相应页数所需要显示的数据 While($it=mysql_fetch_array($info)){ Echo $it['name']."<br />"; } //显示数据 For($i=1;$i<=$pagenum;$i++){ $show=($i!=$page)?"<a href='index.php?page=".$i."'>$i</a>":"<b>$i</b>"; Echo $show." "; } /*显示分页信息,假如是当页则显示粗体的数字,其余的页数则为超连接,假如当前为第三页则显示如下 1 2 3 4 5 6 */ ?>
아주 간단하지 않나요? 좀 더 개인화된 표시를 위해 머리를 사용해보세요. "홈페이지, 이전 페이지, 다음 페이지, 마지막 페이지" 형식을 구현하는 방법에 대해 질문하겠습니다. 페이징은 어떻습니까?
요약: 프로토타입: Select * from table Limit 0,10프로그램: select * from table Limit $offset,$num($offset 값: pass Number) 입력된 페이지 수 - 1 $num은 각 페이지에 표시되는 데이터이며 대부분 고정된 상수 값입니다.) 총 페이지 수: 전체 데이터의 % 각 페이지에 표시되는 항목 수, 2개 이상 int totalPage= ( (totalCount%NUM)==0)?totalCount/NUM:totalCount/NUM+1;
사용 제한: 시작 지점 제한, 추출할 숫자
하지만 참고해야 합니다. 순서를 추가한 경우 오름차순 또는 내림차순으로 쿼리해야 합니다. 그렇지 않으면 쿼리할 때 쿼리를 시작할 방향을 알 수 없습니다. 하지만 순서에 주의하세요. 올바른 순서는 select * from user order by id desclimit 0,10;
PHP 페이징 원리 및 관련 기사에 대한 자세한 설명을 보려면 다음을 참고하세요. PHP 중국어 웹사이트!
관련글 :
PHP를 이용한 간단한 페이징 클래스 구현과 자세한 사용법