2013-01-12 2 views
0

페이징 문제를 해결하기 위해 노력하고 있으며 다음 코드를 이해하지 못합니다.PHP와 SQL을 사용하여 페이지 매기기

   $lstart = ($page * 6) -6; 
       $lend = ($page * 6)-1; 
       $limit = $lstart.','.$lend; 

결과는 서로 다릅니다. 페이지 당 6 개의 기사를 가져야하지만 일치하지 않습니다. 코드는 다른 사람으로부터 상속 된 스크립트에 통합되어 있으며이를 수정하려고합니다. 누군가이 코드를 설명 할 수 있습니까? 쿼리에서 LIMIT = $ limit.

+1

'LIMIT start, number'인 경우 '시작/중지'컨텍스트가 아닙니다. 그것은 레코드'35'로 시작해서 다음 번'30' *을 주겠다. 그래서 그것은 바로 그 시점에서 보지 않습니다. –

답변

2

그것은해야합니다 ...

$lstart = ($page * 6) -6; // quite frankly, it's clearer to write... 
     // ($page - 1) * 6 
$limit = $lstart.',6'; 

제한의 두 번째 절은 얼마나 많은 항목을 선언합니다. 특정 시점까지. MySQL의 문서에서


: (복사/붙여 넣기)

SELECT * FROM tbl LIMIT 5,10; # Retrieve rows 6-15 

그래서, 10이 1 행을 얻기 위해, 따라서 행 2-11 것, 당신은 제로 오프셋을 설정해야합니다 : 0,10 행을 1-10 줄 것입니다.

또한 여기 LIMIT에 대한 자세한 튜토리얼을 확인할 수 있습니다 : 설명과 http://php.about.com/od/mysqlcommands/g/Limit_sql.htm


코드.

$rows_per_page = 6; // you're trying to get 6 rows for every "page". 

// On page 1, you'd want rows 0-5 (6 rows inclusively) 
// On page 2, you'd want rows 6-111 (again, 6 rows inclusively) 
// and so forth. 
// So when $page == 1, you want to start at 0, on page 2, start at 6.... 
// To express this pattern mathematically, we write: 
$start = ($page - 1) * 6 

// mysql takes offset and number as it's two variables in the LIMIT clause, 
// in that order, when two are provided. 
// So we write: 
$query = "SELECT * FROM table WHERE 1 LIMIT $start, $rows_per_page;"; 

// So, at page 1, you get 
$query = "SELECT * FROM table WHERE 1 LIMIT 0, 6;"; // if we were to substitute the variables. 
$query = "SELECT * FROM table WHERE 1 LIMIT 6, 6;"; // at page 2 
$query = "SELECT * FROM table WHERE 1 LIMIT 12, 6;"; // at page 3 
+0

Jonathan의 답변과 매우 유사합니다. 유일한 차이점은 코드에서 +1입니다. 나는 너의 것을 시도해 보았고 같은 결과를 얻었다. 한 페이지에있는 모든 기사. – Learner

+0

@Learner Johanathan의'$ lstart = ($ page-1) * 6 + 1; '의 대답에서'+ 1'은 두 번째 레코드에서만 시작하고 싶지 않다면 실제로 잘못입니다. 오프셋 값은 0부터 시작합니다. mysql 문서 : http://dev.mysql.com/doc/refman/5.5/en/select.html 및 테스트를 통해 확인할 수 있습니다. 모든 결과를 얻는다면 특정 "0,6"문자열이 아닌 다른 곳에서 오류가 있음을 의미합니다. 편집 : 나는 어떻게 오프셋 작업을 보여주는 MySQL의 문서에서 발췌와 내 대답을 편집했습니다. – Grumpy

+0

LIMIT 5,10을 읽도록 쿼리를 변경했으며 Slstart = ($ page-1) * 6 및 Slimit = $ lstart 위에 코드를 사용했습니다. , 6 '; 5 개의 레코드가 있고 seond 페이지에 SQL 구문 오류가 있습니다. Johnathan은 코드를 수정 해 주었지만 도움이되지 않았습니다. – Learner