2013-05-28 2 views
0

페이지 번호가 있습니다.페이지 네이션 변수

그러면 다음 페이지에 대한 html 링크가 만들어집니다. 불행하게도 $pageno 변수는 예를 들어 +1 변경으로 작동하지 않는다고 말할 수 있습니다. 그것은 id 351 이어도되고, 데이터베이스의 행은 항상 연속 번호가 아니라 틈이 있습니다.

1, 2, 4, 6, 7 등 (이 때문에 스크립트가 ID를 할당하는 방식입니다. 그래서 대신 +1 매김 변수를 갖는

, 어떻게 다음 행을 찾을 수를 알 수 있습니다 ? 대신

감사

편집 :

나는이 글의 해결책을 발견 : mysql get previous and next record id

+0

sql에서 'LIMIT' 절을 사용하십시오.이 절은 사용자의 ID 번호와 완전히 관련이 없습니다. – jeroen

답변

0

DB 테이블의 기본 키는 auto_incriment 여야합니다. 그러나 행을 삭제하면 여전히 ID에 구멍이 생길 수 있습니다.

@jeroen이 계시하므로 목록의 ID별로 행을 선택해서는 안됩니다. 그냥 LIMIT을 사용하십시오.

예 :

페이지에 대한

, 우리는 단순히 쿼리 문자열을 사용 Heres는 정말 간단한 예

SELECT * FROM post WHERE active = 1 ORDER BY id LIMIT 0, 10 
0

. 이 예에서는 $ _GET [ 'page']을 사용하여 $ page 변수를 초기화합니다. GET var를 설정하지 않으면 기본값 인 1 페이지로 이동합니다.

$page = isset($_GET['page']) ? (int) $_GET['page'] : 1; 

이제 우리는 쿼리에 몇 개의 페이지가 있는지 파악하려고합니다. 이를 위해 COUNT() SQL 함수를 사용하여 반환 된 숫자를 원하는 페이지 당 결과량으로 나눕니다.

$pages = implode(mysql_fetch_assoc(mysql_query("SELECT COUNT(key) FROM table"))); 
$pages = ceil($pages/6); 

이제 다른 GET 변수가 설정 될 수 있으므로 쿼리 문자열을 보존하려고합니다. 이렇게하기 위해 우리는 모든 현재 변수 (물론 페이지 1 제외)를 문자열로 어셈블합니다.

$querystring = ""; 
foreach ($_GET as $key => $value) { 
    if ($key != "page") $querystring .= "$key=$value&"; 
} 

그런 다음 페이지를 반복하여 링크를 표시 할 수 있습니다. 조건부 또는 삼항 연산자를 사용하여 현재 페이지에 다른 클래스를 지정할 수도 있습니다. (- 1) * 6 ($ 페이지), 6 (우리가 가지고 있기 때문에

echo "Pages: "; 
for ($i = 1; $i <= $pages; $i++) { 
    echo "<a " . ($i == $page ? "class=\"selected\" " : ""); 
    echo "href=\"?{$querystring}page=$i"; 
    echo "\">$i</a> "; 
} 

그런 다음,이 경우 LIMIT에서 우리가 LIMIT의 SQL 절을 사용하여 현재 페이지와 관련된, 또는 결과 만 표시 첫 번째 페이지는 0 번째 레코드에서 쿼리해야합니다.

$result = mysql_query("SELECT * FROM table LIMIT " . (($page - 1) * 6) . ", 6"); 
+0

나는 코드를 바꿔서 모든 행을 페이지 번호로 표시한다. 따라서 80 행을 가진 앨범은 1 - 80 페이지를 보여줍니다. 페이지 번호를 나타내는'$ i' 변수가있는 곳에 문제가 있습니다.원래의 문제는 여전히 존재합니다. 다음 기존 행을 호출하지 않고 단지 ID가 1-80이라고 가정합니다. –