결과중 몇개 까지만 가져오기
SELECT * FROM 테이블명 LIMIT 10; -- 처음 부터 10개만 출력하기 (1 ~ 10)
SELECT * FROM 테이블명 ORDERS LIMIT 20 OFFSET 5; -- 5번째 행 부터 25행 까지 출력 (6 ~ 25)
-- limit 5, 20 과 같다고 보면 된다.
SELECT * FROM 테이블명 ORDERS LIMIT 5, 20
[출처 Code](출처: https://inpa.tistory.com/entry/MYSQL-📚-LIMIT-OFFSET#limit [Inpa Dev 👨💻:티스토리])
limit은 가져올 데이터 양, offset은 가져올 초기 값
Paging 을 하기위해서 0 부분을 변수로 지정하여, 페이지를 이동할때마다 해당 페이지의 offset 값을 계산
//Page로 update 날짜 내림차순 조회
public Page<Schedule> findAllOrderByUpdatedDateDesc(SearchDto searchDto) {
int limit = searchDto.getLimit();
int offset = searchDto.getOffset();
// 전체 레코드 수를 계산하는 쿼리
String countSql = "SELECT COUNT(*) FROM schedule";
Long totalCount = jdbcTemplate.queryForObject(countSql, Long.class);
if (totalCount == 0 || offset >= totalCount) {
return new PageImpl<>(Collections.emptyList(), PageRequest.of(offset / limit, limit), totalCount);
}
String sql = """
SELECT s.*,
m.id AS member_id, m.user_id AS user_id, m.password AS member_password,
m.name AS member_name, m.email AS member_email, m.updated_at AS member_updated_at
FROM schedule s
LEFT JOIN member m ON s.member_id = m.id
ORDER BY s.updated_at DESC
LIMIT ? OFFSET ?
""";
List<Schedule> schedules = jdbcTemplate.query(sql, new Object[]{limit, offset}, scheduleRowMapper());
return new PageImpl<>(schedules, PageRequest.of(offset / limit, limit), totalCount);
}