2012-06-19 5 views
0

테이블에서 20 레코드 만 선택하고 페이지 당 5 레코드를 표시하는 페이지 매기기를 추가해야합니다. 페이지 매기기에서 LIMIT을 사용하지만 먼저 20 개의 레코드를 가져와 20 개의 레코드에 페이지 매기기를 추가해야합니다.PHP 페이지 매김 제한된 수의 레코드에만 적용

+0

내가 설명하려고하는 문제를 오해하고 있습니다. 나는 페이지 매김을하는 방법을 알고 싶지 않다. 나는 페이지 매김을하는 방법을 안다. 하지만 테이블의 마지막 20 개 레코드에 페이지 매김을하고 싶습니다. 페이지 매김을하는 방법을 알려주지 않고 이것을 달성하는 방법을 이해하도록 도와주십시오. 덕분에 –

+0

그래서 당신의 문제가 올바른 테이블의 마지막 20 레코드를 가져 오는 것 같아? 아래에 업데이트 된 답변을 확인하십시오. – verisimilitude

답변

1

한 번에 20 개의 레코드를 선택한 다음 array_slice을 사용하여 페이지 매김을 수행 할 수 있습니다.

편집 : 왜이 한계가있다? 제한은 다음과 같아야합니다.

1st page: LIMIT 0, 5 
2nd page: LIMIT 5, 5 
3rd page: LIMIT 10, 5 
4th page: LIMIT 15, 5 
+0

가장 최근에 추가 된 20 권의 책을 보여주고 싶습니다. 한 페이지 당 5 개씩 보여주고 싶습니다. 그래서 실제로 2 개의 제한이 있습니다. 첫 번째 제한은 20 레코드를 얻고 페이지 당 5 레코드를 표시하는 페이지 매김을 추가하는 것보다 우선합니다. 나는 이것을 달성하는 방법을 모른다. 내가 배열 슬라이스를 사용하고 싶지 않다. –

+0

@KhawerZeshan 하나의 쿼리 만 사용하고 싶지 않으므로 문제가 무엇인지 알고 싶다면 정상적인 페이지 매김 사용 제한과 오프셋을 사용해서는 안됩니까? – xdazz

+0

혼란의 근원에 대해 확실치 않은 @KhawerZeshan. – verisimilitude

0

두 개의 쿼리를 사용하십시오. 하나는 레코드의 총 개수를 가져옵니다 (개수가 포함 된 행 하나만 반환합니다). 그런 다음 LIMIT을 사용하여 페이지 매김을 선택하십시오.

1

나는 그것에 대해 기본적인 생각을 할 것이다.

1) 많은 많은 행이 테이블에 (단순있다 알아 -

SELECT COUNT(*) 
In your case it is 20. 

2) 당신은 당신이 가고 싶은 행 수 페이지 당 기반으로 표시 할 페이지 수를 알아 에 대한.

intPages = ceil(intTotalRecords/8) 

따라서이 부 분값이 9.5이면 10을 페이지 수로 간주하므로 모든 부동 소수점은 ceil()입니다.

3) 현재 사용중인 페이지를 확인하십시오. 4) 조회에 전송할 한계 및 오프셋 (페이지 번호에 따라 다름)을 확인하십시오. 다음 줄에 뭔가가 있습니다.

intLimit = 8; 
intOffset = (intCurrentPage - 1) * intRowsPerPage; 

5) 현재 페이지
6) 정보를 표시하기위한 행을 잡아 당깁니다. (페이지 네이션 링크도 루핑하여)

이전/다음 페이지가 1을 넘거나 최대 페이지 수를 초과하는지 확인하고 이에 따라 intCurrentPage 값을 설정해야합니다.

업데이트 : 테이블에서 레코드의 마지막 20 블록을 가져 오려면.

SELECT <column_names> FROM <table_name> 
<optional_where_clause_goes_here> 
ORDER BY <primary_autoincrement_id_field> DESC 
LIMIT 20; 

또는

SELECT <column_names> FROM <table_name> 
WHERE <certain_conditions_here> 
and <primary_autoincrement_id_field> >= (select max(<primary_autoincrement_id_field>) from <table_name>) - 20 

는 AUTO_INCREMENT해야하는 필드 <primary_autoincrement_id_field>입니다 내가 게시 위의 쿼리의 각 종속있다.

0

테이블에서 총 수를 얻을하고 배열

$array = pagination(200000); 

을 반환하고 당신이 쓸 수있는 매김이 페이지 매기기에 다른 배열 indexex를 사용할 수있는 쿼리도

$query = "SELECT * FROM your_table ".$array['querylimit']; 

처럼이 함수를 호출 처음 .

function pagination($totalRows, $perPage = 20){ 
     $page = (isset($_POST['pagination']['page'])) ? intval($_POST['pagination']['page']) : 0; 


     $perPage = intval($perPage); 

     if($perPage == 0){ 
      $perPage = 20; 
     } 

     if(intval($page) < 0){ 
      $page = 1; 
     } 

     if (ceil($totalRows/$perPage) < intval($page)){ 
      $page = ceil($totalRows/$perPage); 
     } 

     if (!$page){ 
      $page = 1; 
     } 
     $prev = $page - 1; 
     $next = $page + 1; 


     if(intval($prev) < 0){ 
      $prev = 1; 
     } 


     $min = (($page - 1) * $perPage); 

     if(ceil($totalRows/$perPage) < $next){ 
      $next = 0; 
     } 

     $end = $min+$perPage; 
     if($end > $totalRows){ 
      $end = $totalRows; 
     } 
     $start = $min+1; 
     $return['showing'] = "$start-$end of $totalRows"; 
     $return['querylimit'] = " LIMIT $min, $perPage"; 
     $return['next'] = $next; 
     $return['prev'] = $prev; 
     return $return; 
    }