복붙노트

[SQL] PHP에서 페이지 매김

SQL

PHP에서 페이지 매김

나는 특정 사용자 있습니다 ABT 발언을 수집하기 위해 사용하고 있습니다. 나는 각 페이지에 7 개의 코멘트를 표시 할 및 페이지 매김을 사용하려면. 구현의 단계 일 것입니다 무슨. 죄송합니다. n00b 질문입니다.

$query = "SELECT msg, user_id, comment_time FROM comments WHERE aid = '$aid' ORDER BY comment_time DESC";
        $result = mysql_query($query) or die("ERROR: $query.".mysql_error());
        if (mysql_num_rows($result) > 0) {
            while($row = mysql_fetch_object($result)){
                $uidval = $row->user_id;
                if ($uidval != 0){
                $userInfo = $facebook->api_client->fql_query("SELECT name, pic_square_with_logo, profile_url FROM user WHERE uid='".$uidval."'");

            //  echo '<br>Array Info<br>';
            //  print_r($userInfo);
            //  echo '<br><br>';

                $nameuser = $userInfo[0]['name'];
                $pic = $userInfo[0]['pic_square_with_logo'];
                $profile_url = $userInfo[0]['profile_url'];

                echo '<img src="'.$pic.'" />';
                echo '<a href="'.$profile_url.'">'.$nameuser.'</a>';
                echo '<br>';
                echo $row->comment_time;
                echo '<br>';
                echo $row->msg;
                echo '<br>';
                }

            }
        }

해결법

  1. ==============================

    1.이 솔루션은 최적의 SQL의 한계 / 오프셋 조항을 통해 달성된다. MySQL의 경우, 이것은 쿼리에 [오프셋] LIMIT [카운트] 추가를 통해 얻을 수있다. PostgreSQL의 용도 오프셋 선택 ... LIMIT [카운트] 구 [옵셋]을 분리한다.

    이 솔루션은 최적의 SQL의 한계 / 오프셋 조항을 통해 달성된다. MySQL의 경우, 이것은 쿼리에 [오프셋] LIMIT [카운트] 추가를 통해 얻을 수있다. PostgreSQL의 용도 오프셋 선택 ... LIMIT [카운트] 구 [옵셋]을 분리한다.

    아이디어는 당신이 표시 할 실제 숫자로 반환 된 결과의 수를 제한합니다. 당신은 페이지 당 백 개 결과, 200 페이지의 1 표시하는 경우는 큰 성능 향상을 얻을 수 있습니다.

    결과 집합의 결과 수를 결정하기 위해 SELECT COUNT (*)에서 ... - 물론, 당신은 두 번째 쿼리를 실행해야합니다. 페이지 당 결과의 숫자로이 분할, 당신은 페이지 수를 가지고있다.

    당신은 가능성이 쿼리 문자열에 뭔가를 페이지 매개 변수를 전달하기를 원할 것입니다

    http://mysite.com/index.php?page=7
    

    다음 유사한 방법을 사용하여 데이터를 가져 오는 (이 의사 코드를 고려, 내가 실제로 제대로 쿼리 아니에요 알고있다)

    <?php
    
    $num_per_page = 20; // 20 results per page
    
    $page = isset($_GET['page']) ? $_GET['page'] : 0; // start from page 0
    
    // Build our big query minus the SELECT part here
    $from_part = 'tbl_results [where ...]"'
    
    $num_results = query("SELECT COUNT(*) FROM $from_part");
    
    // Use ceil to round upwards
    $num_pages = ceil($num_results / $num_per_page);
    
    // Cap the page a the last page
    if ($page > $num_pages)
      $page = $num_pages;
    
    // Cap the page at the first page
    if ($page <= 1)
      $page = 1;
    
    $offset = $page * $num_per_page;
    
    // Build the final query to select the relevant page of data
    $results = query("SELECT * FROM $from_part LIMIT $offset, $num_per_page");
    
    ?>
    
  2. ==============================

    2.이것은 매김을 구현하는 것입니다 방법 기본적인 방법입니다 :

    이것은 매김을 구현하는 것입니다 방법 기본적인 방법입니다 :

    // Page number, >= 1, could come from $_GET for example
    $page = 1;
    // Amount of items to show on page
    $perpage = 7;
    // Calculate the index of first item to show,
    // on page 1 we obviously want to start from 0, hence the - 1 part
    $start = ($page - 1) * $perpage;
    // Build the query using those variables
    $query = "SELECT ... LIMIT $start, $perpage";
    

    당신은 물론 첫 번째 테이블에있는 항목의 수를 확인하는 등 페이지 변수를 조정하여 계정에 최대 및 최소 페이지 숫자를 가지고해야 할 것입니다, 그러나 이것은 당신이 시작하는 것이다.

  3. ==============================

    3.사용 제한은 페이지로 끌어 첫 번째와 기록의 수를 표시하려면 Y를 X.

    사용 제한은 페이지로 끌어 첫 번째와 기록의 수를 표시하려면 Y를 X.

  4. ==============================

    4.페이지 매김을 할 학습 초보자로서 가치있는 노력은하지만, 내가보기 엔 그냥 이미 기록 된 코드를 사용하는 것이 좋습니다. PEAR, 젠드 프레임 워크, 또는 페이지 매김 구현을위한 라이브러리의 다른 모음을 확인하세요.

    페이지 매김을 할 학습 초보자로서 가치있는 노력은하지만, 내가보기 엔 그냥 이미 기록 된 코드를 사용하는 것이 좋습니다. PEAR, 젠드 프레임 워크, 또는 페이지 매김 구현을위한 라이브러리의 다른 모음을 확인하세요.

    위의 예는 보안 방법, 유지 보수 및 생산 품질 코드로 이동 다른 요인을 어떻게 매김 작품의 좋은 설명을 제공하지만, 완전히 무시합니다. 나는 그들이 자신의 예를 사용하지 그러므로에, 당신을 위해 쓰기 생산 품질 코드에 시간이 없다고 말하는거야 위의 덧글 불타는 아니에요 (붙여 넣기 복사).

    보안, 문질러 무엇을 당신의 GET 매개 변수와 안전한 데이터베이스 추상화 계층을 통해 제공됩니다 여기에 매우 필요하다. 또한 사람이 수동으로 범위 외 또는 범위 미만의 값을 입력 여부의 프린지 시나리오를 처리해야합니다.

    상기 문제의 대부분은 요즘 (KohanaPHP, 젠드 프레임 워크, CakePHP는, C ... 등) 프레임 워크에 의해 처리됩니다.

  5. from https://stackoverflow.com/questions/2060399/pagination-in-php by cc-by-sa and MIT license