웹 프로그램으로는 회원 데이터, 기사 데이터 등 수많은 데이터를 처리해야 하는 경우가 많습니다. 회원 수가 수십 명 정도라면 한 페이지에 표시하기가 쉽지만, 귀하의 웹 사이트 회원이 수천 명, 심지어 수십만 명이라면 한 페이지에 모두 열리면 브라우저와 뷰어 모두에게 고문이 될 것입니다. 게다가 데이터가 수억이면 한 번 쿼리하는 것입니다. 데이터베이스는 서버에 많은 부담을 주게 됩니다. 예, 이는 올바른 방법이 아닙니다.
PHP를 처음 배우시는 분들이라면 페이지네이션 때문에 머리 아플 거라 생각하는데, 모모님의 글을 보면 '야, 페이지네이션이 이렇게 간단하구나?'라며 고개를 끄덕이게 되실 겁니다. 실제로, 지금 신선한 공기를 깊게 들이쉬고 Silence가 조금씩 설명하는 것을 주의 깊게 들어보시기 바랍니다.
1000개의 데이터를 처리하여 각 페이지에 10개의 정보를 표시한다고 가정해 보겠습니다. 이 경우 먼저 mysql에서 10개의 정보를 추출하는 방법을 살펴보겠습니다. .
Select * from tablelimit 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 //2페이지
한도 20,10 //3페이지
한도 30,10 //4페이지
...
패턴 보기 이미 ? 예, 첫 번째 매개변수는 페이지를 넘길 때마다 10씩 증가하지만 두 번째 매개변수는 변경되지 않습니다.
즉, 페이지 수에 따라 첫 번째 매개변수의 값을 변경하려고 하면 데이터를 페이지 단위로 표시할 수 있다는 원리가 아주 간단하죠?
그런데 페이지 수에 따라 첫 번째 매개변수의 값을 어떻게 변경하나요? 먼저 URL의 GET 메소드를 사용하여 얻을 수 있는 페이지 번호 값이 필요합니다.
예를 들어, index.php?page=18
이런 종류의 URL 주소는 어디에서나 찾을 수 있습니다. 페이지 매개변수의 기능은 다음과 같습니다. 표시할 페이지.
코드를 통해 어떻게 구현되는지 살펴보겠습니다.
[php]
/*
저자: Silently
날짜:2006-12-03
*/
$page=isset($_GET['page'])?intval($_GET['page' ]):1; //페이지=18에서 페이지 값을 가져오는 문장입니다. 페이지가 없으면 페이지 번호는 1입니다.
$num=10; //페이지당 10개의 데이터 표시
$db=mysql_connect("host","name","pass") //데이터베이스 연결 생성
$select =mysql_select_db("db",$db); //운영할 데이터베이스를 선택
/*
우선 데이터베이스에 얼마나 많은 데이터가 있는지 알아내야 한다. 몇 페이지로 나누어야 하는지, 그리고 전체 페이지인지 구체적인 계산 공식은
전체 데이터 수를 각 페이지에 표시되는 항목 수로 나누고 나머지는 1로 반올림하는 것입니다.
즉, 10/3=3.3333=4 나머지가 있으면 1씩 반올림해야 합니다.
*/
$total=mysql_num_rows(mysql_query("select * from table")); //쿼리 데이터의 총 개수
$pagenum=ceil($total/$num) ; / /총 페이지 번호 pagenum 가져오기
//수신 페이지 번호 매개변수 apge가 총 페이지 번호 pagenum보다 크면 오류 메시지가 표시됩니다.
If($page>$pagenum | | $page == 0) {
Echo "오류: 페이지를 찾을 수 없습니다.";
종료;
}
$offset=($page-1)*$num ; //제한 번호를 가져옵니다. 매개변수의 값 오프셋입니다. 첫 번째 페이지가 (1-1)*10=0이면 두 번째 페이지는 (2-1)*10=10입니다. (전달된 페이지 수 - 1) * 각 페이지의 데이터는 제한의 첫 번째 매개변수 값을 가져옵니다
$info=mysql_query("select * from table Limit $offset,$num ") / /Get 해당 페이지에 표시해야 할 데이터
While($it=mysql_fetch_array($info)){
Echo $it['name']."
";
} // 데이터 표시
For($i=1;$i<=$pagenum;$i++){
$show=($i!=$page)?" $i":"$i";
Echo $show." ";
}
/*페이징 정보를 표시합니다. 현재 페이지인 경우 굵은 숫자로 표시됩니다. 나머지 페이지 번호는 하이퍼링크입니다. 세 번째 페이지인 경우 다음과 같이 표시됩니다. 다음
1 2 3 4 5 6
*/
?>
[/php]
위 코드를 주의 깊게 읽고 데이터베이스 연결 및 쿼리 테이블을 자신의 것으로 바꾸면 실행 효과를 볼 수 있습니다.
아주 간단하지 않나요? 좀 더 개인화된 표시를 위해 머리를 사용해보세요. "홈페이지, 이전 페이지, 다음 페이지, 마지막 페이지" 형식을 구현하는 방법에 대해 질문하겠습니다. 페이징은 어떻습니까?
좋아, 워터 포스트 채우기를 마치고 하루를 마무리하세요. ^_^ PHP 및 MYSQL 페이징 원칙 및 구현에 대해 조용히 이야기
=============================================== ="
요약:
프로토타입: Select * from table Limit 0,10
프로그램: select * from table Limit $offset,$num ($offset 값은 전달된 페이지 수- 1 $ num은 각 페이지에 표시되는 데이터, 대부분 고정된 상수 값)
총 페이지 수: 전체 데이터의 % 각 페이지에 표시되는 항목 수, 나머지
int totalPage=(( totalCount%NUM )==0)?totalCount/NUM:totalCount/NUM+1;
사용 제한: 시작 지점 제한, 추출할 숫자
그러나 참고 사항: 반드시 순서를 추가하려면 오름차순이나 내림차순으로 쿼리해야 합니다. 그렇지 않으면 쿼리할 때 쿼리를 시작할 방향을 알 수 없습니다. 하지만 순서에 주의하세요: 올바른 것은 select * from user order by id desclimit 0,10;
더 많은 관련 기사를 보려면 PHP 중국어 웹사이트(www.php)에 주목하세요. .cn) !