온우카 기드온은 수년간 웹 애플리케이션을 설계 및 코딩하고 복잡한 문제를 해결한 경험이 있는 프리랜서 풀 스택 개발자입니다. 그는 보안, 글쓰기, 새로운 기술에 대한 토론을 좋아합니다.
많은 수의 문서를 다루는 애플리케이션을 구축할 때는 페이지 매김을 사용하여 페이지별로 행을 가져오는 것이 중요합니다.
이 글에서는 N1QL과 PHP로 작업할 때 페이지 매김을 구현하는 방법을 보여드리겠습니다.
N1QL에 대해 조금 알아보기
Couchbase N1QL은 JSON용 SQL을 확장하는 선언적 쿼리 언어입니다. 네이티브 프레임워크 및 언어 통합, 유창한 API 또는 JDBC/ODBC 드라이버를 통해 데이터를 쿼리할 수 있습니다. N1QL은 개발자에게 데이터를 쿼리하고 조작할 수 있는 표현력이 풍부하고 강력하며 완벽한 언어를 제공합니다.
전제 조건
- 카우치베이스에 대한 기본 지식과 서버에 설정된 카우치베이스(카우치베이스 설치)
- N1QL에 대한 기본 지식
- PHP에 대한 기본 지식(모든 언어를 사용할 수 있으므로 선택 사항)
- 사용 가능한 카우치베이스 SDK(여기로 이동)
우리가 구축할 것
이 글에서는 기본적으로 데이터베이스에서 데이터를 가져와서 페이지 번호를 매기고 표시하는 PHP 환경을 빠르게 설정해 보겠습니다.
환경 설정
1단계: 새 버킷 만들기
Couchbase 관리 영역에 로그인하여 새 버킷 이름을 만듭니다. 댓글 달기
.
2단계: 새 버킷에 대한 인덱스를 만듭니다: 댓글 달기
쿼리 탭을 클릭하고 아래에 나열된 쿼리를 입력한 후 실행을 클릭합니다.
1 |
create 기본 색인 on `댓글 달기` 사용 gsi; |
모든 것이 순조롭게 진행되면 문서 작성을 시작해도 좋습니다.
3단계: 프로젝트 스타터 파일 복제하기
이 튜토리얼에서 사용할 파일의 기본 파일 구조를 만들었습니다.
명령줄을 열고 github에서 리포지토리를 복제합니다.
1 |
$ git 복제 git@github.com:dongido001/php-카우치베이스-페이지 매김 완료.git |
이제 브라우저에서 방금 복제한 파일을 엽니다. 다음 페이지가 표시됩니다:
파일 구조
방금 복제한 리포지토리에는 3개의 PHP 파일이 포함되어 있습니다: config.php
, db.php
및 index.php
.
그리고 config.php
파일은 데이터베이스의 정보를 정의하는 곳입니다:
1 2 3 4 5 6 |
<?php //일부 구성 정의("C_USERNAMAE", "관리자"); 정의("C_PASSWORD", "비밀번호"); 정의("C_URL", "http://127.0.0.1:8091/"); //eg: localhost:8091 정의("기본_버킷", "댓글 달기"); |
에서 db.php
를 클릭한 후 CouchBase에 연결하여 버킷을 열었으며, CouchBase 정보에 맞게 세부 정보를 변경해야 합니다.
1 2 3 4 5 6 7 8 9 10 11 12 |
<?php $인증자 = new \카우치베이스\클래식 인증자(); $인증자->클러스터(C_USERNAMAE, C_PASSWORD); $클러스터 = new \카우치베이스\클러스터(C_URL); $클러스터->인증($인증자); $버킷 = $클러스터->오픈버킷(DEFAULT_BUCKET); In 의 `색인.php`, 우리 가지고 일부 PHP 코드 에서 의 top 의 의 파일 그리고 에서 의 하단, 우리 또한 |
HTML 코드가 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
//index.php <?php //설정 세부 정보 포함 require_once('config.php'); //데이터베이스에 대한 연결을 포함합니다. require_once('db.php'); 만약( $_SERVER['요청_방법'] == "POST"){ $uid = 유니키드(); $댓글 = [ "_id" => $uid, "name" => $_POST["name"], "댓글" => $_POST["댓글"], "created_at" => 날짜("Y-m-d H:i:s") ]; $버킷->삽입($uid, $댓글); } ?> ... |
두 파일을 포함했습니다, config.php
그리고 db.php
그런 다음 양식이 제출될 때 데이터베이스에 몇 가지 주석을 삽입하는 로직을 작성했습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
//index.php ... <!DOCTYPE html> <html lang="en"> <head> <!-- 필수 메타 태그 --> <메타 문자셋="utf-8"> <메타 이름="뷰포트" 콘텐츠="너비=장치 너비, 초기 스케일=1, 맞춤 축소=아니오"> <!-- 부트스트랩 CSS --> <링크 rel="스타일시트" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" 무결성="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" 크로스오리진="익명"> </head> <body> <div 클래스="컨테이너"> <div 클래스="컨테이너" 스타일="여백-왼쪽: 자동; 여백-오른쪽: 자동; 너비: 400px;"> <h4 클래스="텍스트 중심">추가 a 댓글</h4> <양식 액션="" 메서드="POST"> <div 클래스="form-group"> <레이블 에 대한="name">이름:</레이블> <입력 유형="text" 클래스="form-control" 이름="name" 필수> </div> <div 클래스="form-group"> <레이블 에 대한="댓글">댓글:</레이블> <텍스트 영역 클래스="form-control" 행="5" 이름="댓글" 필수> </텍스트 영역> </div> <버튼 유형="제출" 클래스="btn btn-primary">제출하기</버튼> </양식> <br /> <div > <h4 클래스="텍스트 중심">목록 댓글</h4> </div> <div id="페이지 매김"> </div> </div> </div> </body> </html> |
HTML 코드는 댓글을 추가하고 나열할 수 있는 양식을 표시합니다.
이제 시작해 보겠습니다!
페이지에서 원하는 만큼 댓글을 추가합니다. 곧 해당 데이터에 페이지 번호를 매길 예정입니다.
데이터베이스에서 페이지 매김된 콘텐츠 가져오기
의 헤더 부분에 다음을 추가합니다. index.php
는 상단의 모든 PHP 코드 아래에 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
//쿼리에서 모든 콘텐츠 선택 $no_per_page = 4; //페이지당 원하는 항목 수입니다. $현재_페이지 = (발행($_GET['page_id'])) ? $_GET['page_id'] : 1; //현재 페이지를 가져옵니다(설정되지 않은 경우 기본값은 1페이지). $건너뛰기 = ($현재_페이지 - 1) * $no_per_page; //요청할 때 건너뛸 총 페이지 수를 가져옵니다. 1페이지에 있을 때는 어떤 항목도 건너뛸 필요가 없습니다. $쿼리 = \카우치베이스\N1qlQuery::fromString("SELECT * FROM `commenting` LIMIT $no_per_page OFFSET $skip"); $결과 = $버킷->쿼리($쿼리); //데이터베이스의 총 결과 수를 계산합니다. $합계 = $버킷->쿼리(\카우치베이스\N1qlQuery::fromString("SELECT COUNT(comment) total FROM `commenting`")); $합계 = $합계->행[0]->합계; $number_of_pages = ceil( $합계/$no_per_페이지 ); //페이지 수 계산 |
위의 코드에 주석을 추가하여 각각의 기능을 설명했습니다. 여기에서는 LIMIT
AND 오프셋
을 사용하여 각 쿼리가 반환해야 하는 결과의 수를 제한할 수 있었습니다. 오프셋은 현재 액세스 중인 페이지 번호에 따라 쿼리할 때 데이터의 양을 건너뛰는 데 사용되었습니다.
LIMIT
: LIMIT 절은 SELECT가 결과 집합에서 반환할 수 있는 최대 개체 수를 지정합니다. 음수 값 또는 9223372036854775295(1 - 512의 결과)보다 큰 값은 LIMIT 0으로 간주됩니다.
오프셋
: OFFSET 절은 건너뛸 개체 수를 지정합니다. LIMIT 절이 있는 경우 LIMIT보다 먼저 OFFSET이 적용됩니다. OFFSET 값은 음수가 아닌 정수여야 합니다.
쿼리 결과를 페이지에 채우기
아래 코드를 추가하여 index.php
이 태그 바로 뒤에 <h4 class="text-center">댓글 나열</h4>
.
1 2 3 4 5 6 7 8 9 10 |
<?php foreach( 1TP4결과->행 as $댓글 ):?> <div> <div 클래스="경고 경고 성공" 역할="alert"> <h5 클래스="경고 제목"> 으로: <?=$댓글->댓글 달기->이름?>, 생성됨 에서: <?=$댓글->댓글 달기->created_at?> </h5><br> <p> <?=$댓글->댓글 달기->댓글?></p> <hr> </div> </div> <?php endforeach; ?> |
페이지 매김 링크 추가
이 HTML 태그 사이에 아래 코드를 추가합니다. <div id="pagination"> </div>
를 추가합니다.
|
여기서는 페이지의 페이지 수만 인쇄하고 있습니다.
예! 이제 페이지 매김이 작동합니다.
결론
이 글에서는 N1QL을 사용하여 페이지 매김을 구현하는 방법을 배웠습니다. 또한 오프셋
그리고 LIMIT
그리고 기본적으로 N1QL을 사용하여 Couchbase에서 쿼리를 실행하는 방법을 설명합니다. 전체 앱은 여기에서 다운로드할 수 있습니다: (git@github.com:dongido001/php-couchbase-pagination_complete.git
)
읽어주셔서 감사합니다. 여러분의 의견이나 궁금한 점이 있으면 알려주세요.