select * from table 제한 0,10 // 처음 10개 레코드
select * from table 제한 10,10 // 11~20번째 레코드
select * from tablelimit 20,10 // 레코드 21~30
...
코드 복사
이 SQL 문 세트는 실제로 , $pagesize=10일 때 테이블의 각 페이지 데이터를 가져오는 것은 sql 문입니다. 이러한 템플릿을 요약할 수 있습니다.
테이블 제한에서 * 선택($currentpageid - 1) * $pagesize, $pagesize
이 템플릿을 사용하여 해당 값을 대체하고 위의 SQL 문 집합과 비교하여 이것이 사실인지 확인하세요. 데이터를 얻는 방법에 대한 가장 중요한 문제를 해결한 후에 남은 것은 매개변수를 전달하고 적절한 SQL 문을 구성한 다음 PHP를 사용하여 데이터베이스에서 데이터를 가져와 표시하는 것입니다.
php 페이징 코드:
// 데이터베이스 연결 설정 $link = mysql_connect("localhost", "mysql_user", "mysql_password") 또는 die("연결할 수 없습니다: " . mysql_error()) // 현재 페이지 번호를 가져옵니다 if( isset($_get['page']) ){ $page = intval( $_get['page'] ); } else{ $page = 1 } //페이지당 페이지 수 $pagesize = 10 ; //전체 데이터 양 가져오기 $sql = "테이블에서 개수(*)를 선택" $result = mysql_query($sql);$row = mysql_fetch_row( $result); $amount = $row['amount']; // 총 페이지 수 계산 if( $amount ){ if( $amount < $page_size ) { $page_count = 1 ; } //총 데이터량이 $pagesize보다 작으면 한 페이지만 남습니다 if( $amount % $page_size ){ //총 데이터량을 $pagesize로 나눈 나머지를 구합니다. 페이지 수 $page_count = (int) ($amount / $page_size) 1; //나머지가 있으면 페이지 수는 전체 데이터 양을 페이지 수로 나눈 값과 같습니다. +1 }else{ $page_count = $amount / $ page_size;//나머지가 없으면 페이지 수는 전체 데이터 양을 페이지 수로 나눈 값과 같습니다 } } else{ $page_count = 0; } // 페이지 넘김 링크 $page_string = '' if( $page = = 1 ){ $page_string .= '첫 번째 페이지|이전 페이지|' } else{ $page_string .= '| 이전 페이지 |'
}
if( $page == $page_count) || ($page_count == 0) ){
$page_string .= '다음 페이지|마지막 페이지'
}
else{
$page_string .= ' 다음 페이지 |마지막 페이지< ;/a>';
}
// 데이터를 가져오고 2차원 배열 형식으로 결과를 반환합니다.
if( $amount ){
$sql = "id별로 테이블 순서에서 *를 선택합니다. desc 제한 ". ($page-1)*$page_size .", $ page_size";
$result = mysql_query($sql);
while ( $row = mysql_fetch_row($result) ){
$rowset[] = $row;
}
}else{
$rowset = array()
}
// 결과를 표시하는 코드는 포함되지 않습니다. , 이는 논의 범위를 벗어납니다. foreach를 사용하여 간단히 결과를 표시하세요
?>
코드 복사
OO 스타일 코드, 다음 코드의 데이터베이스 연결은 pear db 클래스를 사용하여 처리됩니다.
// 파일명: pager.class.php // 페이징 클래스, 이 클래스는 데이터 처리에만 사용됩니다. 구조, 표시 작업 처리를 담당하지 않음 class pager { var $pagesize; //각 페이지 수 var $currentpageid; //현재 페이지 수 var $nextpageid; / /다음 페이지 var $previouspageid; //이전 페이지 var $numpages; //총 페이지 수 var $numitems; ; //예 첫 번째 페이지 var $islastpage; // 마지막 페이지가 인지 여부 var $sql; // SQL 쿼리문 function pager($option) global $db $this->_setoptions($option);
//총 항목 수
if ( !isset($this->numitems) )
{
$res = $ db->query($this->sql);
$this->numitems = $res->numrows()
}
// 총 개수 페이지
if ( $this->numitems > 0 )
{
if ( $this->numitems < $this->pagesize ){ $this->numpages = 1; }
if ( $this->numitems % $this->pagesize )
{
$this->numpages= (int)($this->numitems / $this-> 페이지 크기) 1
}
else
{
$this->numpages = $this->numitems / $this->pagesize
}
}
else
{
$this->numpages = 0;
}
스위치( $this->currentpageid )
{
case $this-> numpages == 1:
$this->isfirstpage = true;
$this->islastpage = true;
break
사례 1:
$this->isfirstpage = true;
$ this->islastpage = false;
break
케이스 $this->numpages:
$this->isfirstpage = false; islastpage = true;
break;
기본값:
$this->isfirstpage = false
$this->islastpage = false; $this->numpages > 1 )
{
if ( !$this->islastpage ) { $this->nextpageid = $this->currentpageid 1 }
if ( ! $this->isfirstpage ) { $this->previouspageid = $this->currentpageid - 1 }
}
return true
/* **
*
* 결과 셋의 데이터베이스 연결을 반환
* 결과 셋이 상대적으로 큰 경우 이 메소드를 직접 사용하여 데이터베이스 연결을 얻은 후 클래스 외부를 순회할 수 있습니다. 오버헤드 감소
* 결과 세트가 그다지 크지 않은 경우 getpagedata를 직접 사용하여 2차원 배열 형식으로 결과를 얻을 수 있습니다.
* getpagedata 메소드도 이 메소드를 호출하여 결과를 얻습니다
*
***/
function getdatalink()
{
if ( $this->numitems )
{
global $db
$ pageid = $this-> ;currentpageid
$from = ($pageid - 1)*$this->pagesize
$count = $this->pagesize; = $db->limitquery($this->sql, $from, $count); //데이터베이스 호환성을 보장하려면 pear db::limitquery 메소드를 사용하세요.
return $link;
else
{
return false
}
}
/***
*
* 결과 집합을 2차원 배열 형식으로 반환
*
***/
함수 getpagedata()
{
if ( $this ->numitems )
{
if ( $res = $this->getdatalink() )
{
if ( $res->numrows() )
{
while ( $row = $res->fetchrow() )
{
$result[] = $row
}
}
else
{
$ result = array();
}
return $result;
}
else
{
return false; 🎜> }
else
{
return false
}
}
function _setoptions($option)
{
$allow_options = array(
'pagesize',
'currentpageid',
'sql',
'numitems'
)
foreach( $option as $key => $value )
{
if ( in_array($key, $allow_options) && ($value != null) )
{
$this->$key =
}
}
true를 반환합니다.
}
}
?>
코드 복사
페이징 코드 호출:
// 파일명 : test_pager.php // 배 사용을 생략한 간단한 샘플 코드입니다. 데이터베이스 연결을 설정하기 위한 db 클래스의 전면 코드 require "pager.class.php" if ( isset($_get['page']) ) { $page = (int )$_get ['페이지'] } else { $page = 1; } $sql = "ID별로 테이블 순서 선택"; 🎜>$ pager_option = array( "sql" => $sql,
"pagesize" => 10,
"currentpageid" => $page
)
if ( isset( $_get['numitems']) )
{
$pager_option['numitems'] = (int)$_get['numitems']
}
$pager = @new pager($ pager_option);
$data = $pager->getpagedata();
if ( $pager->isfirstpage )
{
$turnover = "홈페이지|이전 페이지|" ;
}
else
{
$turnover = "홈페이지 | < ;a href="/?page=".$pager->previouspageid."&numitems=".$pager->numitems."'>이전 페이지|"
}
if ( $pager->islastpage )
{
$turnover .= "다음 페이지|마지막 페이지"
}
else
{
$turnover .= "< ;a href="/?page=".$pager->nextpageid."&numitems=".$pager->numitems."'>다음 페이지|numpages."&numitems=".$pager->numitems."'>마지막 페이지 ";
}
?>
코드 복사
지침:
이 클래스는 데이터 처리만 하고 표시는 담당하지 않습니다. 데이터 처리와 결과 표시를 하나의 클래스에 넣는 것이 조금 꺼려지기 때문입니다.
표시 상황과 요구 사항은 변경 가능합니다. 클래스에서 제공한 결과에 따라 처리하는 것이 좋습니다. 더 좋은 방법은 호출기 클래스를 기반으로 자체 하위 클래스를 상속하여 다른 페이지 매김을 표시하는 것입니다. 사용자 페이지 매김 목록:
class memberpager 확장 페이저 { function showmemberlist() { global $db ; $data = $this->getpagedata()
// 결과를 표시하는 코드
// ......
}
}
/// 호출
if ( isset($_get['page']) )
{
$page = (int)$_get['page']
}
else
{
$page = 1;
}
$sql = "ID별로 멤버 순서 선택";
$pager_option = array(
"sql" => $ sql ,
"pagesize" => 10,
"currentpageid" => $page
)
if ( isset($_get['numitems']) )
🎜 > $pager_option['numitems'] = (int)$_get['numitems']
}
$pager = @new memberpager($pager_option)
$pager->showmemberlist() ;
?>
코드 복사
둘째, 서로 다른 데이터베이스의 호환성, 서로 다른 데이터베이스에서 결과를 가로채는 작성 방법이 다릅니다.
$pagenum=@ceil($num/$pagesize) ; if($num > $pagesize){
if($pageval<=1) $pageval=1 if($pageval==$pagenum){ echo "< a href='$url?page=1'>홈페이지 이전 페이지 ='#' class='pageup'>다음 페이지 마지막 페이지 " ;
// echo "page".$pageval."/total".$pagenum."page"
echo "페이지로n";
for ($i = 1; $i <= $pagenum; $i ) { if ($i = = $pageval) echo "<옵션 값='$i' 선택됨>$in";
else
echo "<옵션 값='$i'>$ in";
}
echo "$pagenum 페이지의 페이지"
}
}
}
?>
코드 복사