본문 바로가기
MySql

MySQL Ruby on Rails ActiveRecord의 순서 및 정렬 기준 차이

by 베이스 공부 2020. 10. 27.
반응형

컨트롤러의 타임 스탬프 필드에 따라 데이터를 정렬하려고합니다. 타임 스탬프 필드가 null 일 수 있으며 값이있을 수 있습니다. 다음 쿼리를 작성했습니다.

@item = Item.sort_by(&:item_timestamp).reverse
            .paginate(:page => params[:page], :per_page =>5)

그러나 이것은 time_timestamp 필드 값이 NULL 인 항목이 있지만 다음 쿼리가 작동하면 오류가 발생합니다.

@item = Item.order(:item_timestamp).reverse
            .paginate(:page => params[:page], :per_page => 5)

누구든지이 두 쿼리의 차이점과 어떤 조건을 사용해야할지 알 수 있습니까?

그리고 나는 order and reverse를 사용하여 데이터베이스에서 최신 항목을 가져옵니다. 이것이 가장 좋은 방법입니까, 아니면 성능 측면에서 데이터베이스에서 최신 데이터를 얻는 다른 가장 좋은 방법이 있습니까?

 

해결 방법

 

sort_by 는 Ruby에서 실행되므로 nil 값이 있으면 다음과 유사한 방식으로 중단됩니다.

[3, nil, 1].sort
#=> ArgumentError: comparison of Fixnum with nil failed

order 는 RDBMS에 의해 실행되며 일반적으로 NULL 값으로 잘 작동합니다. NULL FIRST (일반적으로 기본값) 또는 NULL LAST 에 추가하여 NULL VALUES 를 넣을 위치를 지정할 수도 있습니다. > ORDER BY 절?

 

참조 페이지 https://stackoverflow.com/questions/42711769

 

 

반응형

댓글