정렬에 대한 질문
264
작성한 질문수 2
안녕하세요,
postman으로 테스트해보다가 궁금한것이 있어 질문 올려요.
질문 전에 base-pagination.dto.ts 에서
order__createdAt의 기본값은 없앤 상태일 때
likeCount DESC 같은것으로 정렬한다면, where__id__... 를 어떻게 해야할지.. 테스트해보니 생각한것처럼 나오지 않아서요.
커서 페이지네이션은 이렇게 쓰면 안되는것인지.. 궁금합니다.
예) 배달비 순으로 정렬, 금액 순으로 정렬 이런것들이요.
감사합니다.
답변 1
1
안녕하세요!
개념은 똑같습니다.
저희는 order id를 기반으로 현재 정렬을 하고 있습니다.
만약에 likeCount로 정렬을 하고싶다면 likeCount를 asc 또는 desc로 정렬 해주시면 됩니다.
다만 여기서의 문제는 likeCount가 같은 값이 여러개 있을 경우입니다. (강의에서 ID 말고 다른 값으로 정렬하면 복잡해진다는 이야기가 여기부터 시작됩니다.)
같은 값이 여러개 존재하면 특정 row의 unique함을 보장해줄만한 장치가 필요합니다.
이때 ID를 복합으로 사용하게되면 절대적으로 unique함이 보장됩니다.
두 값을 사용해서 정렬 및 페이지네이션을 한다면 SQL pseudo code로 아래와 같은 형태가 나옵니다.
가장 마지막 페이지네이션 아이템을 last_item이라고 불러보겠습니다.
ORDER BY created_at ASC, id ASC
위와 같은 정렬을 했다는 가정하에
WHERE (created_at > @last_item_created_at)
OR (created_at = @last_item_created_at AND id > @last_item_id)
이런식으로 쿼리를 해주면 됩니다.
처음 보면 복잡하게 느껴질 수 있지만 하나하나 시간을 두고 읽어보면 상당히 논리적입니다.
만약에 하나의 필터가 더 있었다면
OR (created_at = @last_item_created_at AND id = @last_item_id AND another > @last_item_another)
이런식으로 추가됩니다.
postgresql은 감사하게도 위 쿼리를 쉽게 작성 가능합니다.
WHERE (created_at, id) > (@last_item_created_at, @last_item_id)
감사합니다!
cascade 질문
0
40
1
@types/bcrypt 설치과정이 누락된것같습니다.
0
49
1
process.env port key 에러
0
47
1
추상화
0
51
1
[공유] DTO optional 필드가 undefined로 잡혀 TypeORM 조건이 깨지는 현상
0
101
2
where 키워드가 들어가는 메서드와 아닌 메서드
0
57
1
BearerTokenGuard에서 db를 조회해서 유저 정보를 불러오는 이유?
0
72
1
app.controller app.service 는 지워도되나요?
0
70
1
@JoinColumn을 쓰는 경우와 안쓰는 경우의 차이
0
79
1
포트 3000에서 listen하는 곳까지 넘어가지 않습니다.
0
68
1
PickType 사용 시 `as const`를 꼭 사용해야 하나요?
0
103
2
socket connect 오류
0
98
2
강의를 들으면서 궁금한 점
0
97
2
DELETE 요청의 반환값은 어떤 기준으로 결정하는 게 좋을까요?
0
60
2
커리큘럼 질문
0
100
2
put 요청은 언제
0
90
3
typeorm VS prisma
0
351
2
142 강의 > 4:00 > 포스트멘 활용 관련 질문 드립니다.
0
78
2
User 데코레이터 버그 수정 전달드립니다.
0
68
1
git 주소 부탁드립니다.
0
113
2
nest g resource 명령어 에러
0
99
2
로그인 엔드포인트 관련 질문
0
85
2
yarn으로 express 다운 후 node 2_server.js 실행 안되는 경우
0
148
3
"흔히 사용되는 메서드" 강의 관련 질문입니다~
0
95
2





