반응형
컨트롤러의 타임 스탬프 필드에 따라 데이터를 정렬하려고합니다. 타임 스탬프 필드가 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
반응형
'MySql' 카테고리의 다른 글
MySQL 단일 행에서 여러 열의 AVG를 선택하는 방법 (0) | 2020.10.27 |
---|---|
MySQL PHP에서 MySQL 외래 키 제약 조건 무시 (0) | 2020.10.27 |
MySQL Laravel 5 eloquent를 사용한 CONCAT 컬럼 (0) | 2020.10.26 |
MySQL 데이터베이스가 존재하는지 (MySQL) 확인하고 PHP에서 생성하지 않은 경우 (0) | 2020.10.26 |
MySQL WHERE 절 MYSQL의 ISNULL (값, 0) (0) | 2020.10.26 |
댓글