인프런 커뮤니티 질문&답변

chanyang0328님의 프로필 이미지
chanyang0328

작성한 질문수

Slack 클론 코딩[백엔드 with NestJS + TypeORM]

local serializer, guard

TypeORM 쿼리빌더 orderBy 질문있습니다.

작성

·

2.8K

0

쿼리빌더를 사용해 데이터를 가져올때 orderby를 두개의 컬럼에 사용하면 데이터를 부족하게 가져오는 경우가 있어서 질문드립니다.

const query = await this.reportRepository
.createQueryBuilder('report')
.select([
'report',
'content.reportContent',
'hashtag.hashtagName',
'hashtag.id',
'map.createdAt',
])

.innerJoin('report.ReportContent', 'content')
.leftJoin('report.Hashtag', 'hashtag')
.leftJoin('hashtag.ReportHashtag', 'map', 'map.ReportId =report.id');
const reports = await query
.skip(6 * (1 - 1))
.take(6)
.orderBy({ 'report.updatedAt': 'DESC', 'map.createdAt': 'ASC' })
.getMany();
return reports;

해당 쿼리문은 데이터를 총 6개를 가져와야하는 쿼리문이지만 2개를 가져옵니다. 하지만 마지막 orderBy에서 'map.createdAt': 'ASC'를 빼면 정상적으로 6개를 가져오게 되네요.. TypeORM의 버그일까요 아니면 쿼리문에 부족한 점이 있을까요?

 

답변 2

1

제로초(조현영)님의 프로필 이미지
제로초(조현영)
지식공유자

https://stackoverflow.com/questions/64681418/orderby-on-multiple-columns-using-typeorm

이렇게 addOrderby를 쓰시면 어떤가요?

그리고 기존 쿼리랑 수정한 쿼리랑도 sql을 비교해보시면 좋을것 같습니다.

0

chanyang0328님의 프로필 이미지
chanyang0328
질문자

아하! 빠른답변감사합니다. addOrderBy를 사용해도 같은 결과로 2개의 데이터를 가져옵니다. 하지만 쿼리로그를 보니 6개의 각각의 다른 id를 가져오는게 아니라 중복되게 가져와서 결과적으로 2개만 가져오게 되네요! 참고많이되었습니다! 감사합니다.

chanyang0328님의 프로필 이미지
chanyang0328

작성한 질문수

질문하기