offset


데이터의 출력 개수를 제어하는 OFFSET 키워드가 있습니다. OFFSET은 LIMIT를 이용 하여 부분 출력하는 동작은 비슷합니다.

| 쿼리 문법 |

SELECT 컬럼명, 컬럼명,  FROM 테이블명 LIMIT 레코드  OFFSET 이동 레코드 ; 

데이터를 출력할 때 OFFSET 수만큼 이동한 다음에 지정한 레코드 수만큼을 출력합니다.


콘솔 실습


LIMIT 에서 처음에 이동하는 시작점을 OFFSET 부분의 위치로 이동한 것과 비슷합니다.

| 예제 쿼리 |

select code from orders limit 3 offset 3; 

주문 목록에서 오프셋 위치를 3으로 이동합니다. 이동 시점에서 연속된 데이터 3개를 읽 어서 출력합니다.

| 콘솔 실습 화면 |

mysql> select code from orders limit 3 offset 3; +-------+ | code | +-------+ | O_004 | | O_005 | | O_006 | +-------+ 3 rows in set (0.00 sec) 

데이터를 3만큼 시작 위치를 이동한 상태에서 3개의 데이터만 출력합니다. 즉 LIMIT 3, 3과 비슷합니다.


PHP 실습


PHP 코드를 통하여 OFFSET 처리에 대한 실습을 합니다.

| PHP 예제 | mysql.class.php 파일에 메서드 예제를 추가합니다.

// 지정한 위치많큼 이동후, 갯수를 출력합니다.
public function offset($query, $a, $b){
            $queryString = $query . " limit $b offset $a";
            return $queryString; 
}
 

예제 파일 | offset-01.php

<?php

	include "dbinfo.php";
	include "mysql.class.php";
 
	// ++ Mysqli DB 연결.
	$db = new JinyMysql();

	// 기본 select 쿼리
	$query = "SELECT Id, FirstName, LastName FROM members";
	// 기본쿼리에 2만큼 이동후 3개를 출력함.
	$queryString = $db->offset($query,2,3);
    
	if($rowss = $db->selectRowss($queryString)){
		echo "tables fields = ". count($rowss) . "<br>";
 
		for($i=0;$i<count($rowss);$i++){
			echo $i."=";            
			print_r($rowss[$i]);
			echo "<br>";
		}
	}

?>

화면 출력

mysql connected!
쿼리성공] SELECT Id, FirstName, LastName FROM members limit 3 offset 2
tables fields = 3
0=stdClass Object ( [Id] => 3 [FirstName] => kim [LastName] => james )
1=stdClass Object ( [Id] => 5 [FirstName] => jiny [LastName] => 1234 )
2=stdClass Object ( [Id] => 6 [FirstName] => jiny [LastName] => 1234 )