"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Laravel에서 아래쪽에 빈 값과 비어 있지 않은 값을 내림차순으로 정렬하는 행

Laravel에서 아래쪽에 빈 값과 비어 있지 않은 값을 내림차순으로 정렬하는 행

2024-11-06에 게시됨
검색:705

Sorting Rows with Empty Values at the Bottom and Non-Empty Values in Descending Order in Laravel

데이터베이스로 작업할 때 일부 필드가 비어 있거나 NULL인 상황에 직면하는 것이 일반적입니다. 자주 발생하는 문제 중 하나는 빈 필드가 있는 행이 결과 집합의 맨 아래에 표시되고, 비어 있지 않은 값이 있는 행이 의미 있는 방식(예: 내림차순)으로 정렬되도록 레코드를 정렬하는 방법입니다. 이번 포스팅에서는 실용적인 예제를 사용하여 Laravel에서 이를 달성하는 방법을 보여드리겠습니다.

대본

활동에 대한 참가자 테이블이 있고 각 참가자는 참가자가 활동에 참석한 시간을 기록하는 Attend_at 타임스탬프를 가질 수도 있고 가지지 않을 수도 있다고 가정해 보겠습니다. 모든 참가자를 나열하고 다음과 같은 방식으로 정렬하려고 합니다.

  • 참석한 참가자(즉, Attention_at이 비어 있지 않음)가 가장 최근 참석자 순으로 정렬되어 먼저 나타납니다.
  • 참석하지 않은 참가자(즉, Attention_at이 비어 있거나 NULL임)가 마지막에 나타납니다.

문제

기본적으로 Laravel의 최신() 메소드는 주어진 열을 기준으로 내림차순으로 레코드를 정렬합니다. 그러나 일부 레코드에 NULL 또는 빈 값이 있는 경우는 처리하지 않습니다. 간단히 사용하는 경우:

return $this
    ->participants()
    ->with('user')
    ->latest('attended_at')
    ->get();

타임스탬프를 사용하여 참가자를 정렬하지만 NULL 값을 맨 아래로 이동하지는 않습니다.

해결책: orderByRaw 사용

orderByRaw() 메소드를 사용하여 원하는 정렬을 달성할 수 있습니다. 이를 통해 원시 SQL 표현식을 사용하여 사용자 정의 정렬 논리를 작성할 수 있습니다. 이 경우 Attention_at가 NULL인지 여부에 따라 정렬한 다음 NULL이 아닌 값에 대해서는 Attention_at의 내림차순으로 정렬합니다.

Laravel에서 이 쿼리를 작성하는 방법은 다음과 같습니다.

return $this
    ->participants()
    ->with('user')
    ->orderByRaw('attended_at IS NULL, attended_at DESC')
    ->get()
    ->map(function (ActivityParticipant $participant) {
        return [
            'metric_number' => data_get($participant, 'user.student_id'),
            'name' => data_get($participant, 'user.name'),
            'status' => data_get($participant, 'status'),
            'attended_at' => data_get($participant, 'attended_at', '-'),
        ];
    })->toArray();

쿼리 분석

  • orderByRaw('attended_at IS NULL, Attention_at DESC'):
    • Attend_at IS NULL: Attend_at가 NULL인 행에 대해서는 true(또는 1)를 반환하고 그렇지 않으면 false(또는 0)를 반환합니다. 이렇게 하면 효과적으로 아래쪽에 NULL 값이 배치됩니다.
    • Attend_at DESC: NULL 값을 처리한 후 비어 있지 않은 Attention_at 값이 있는 나머지 행을 내림차순으로 정렬합니다. 즉, 가장 최근 출석이 먼저 표시됩니다.

최종 출력

그런 다음 map() 함수를 사용하여 Student_id, 이름 및 상태와 같은 필드를 포함하여 원하는 구조로 출력 형식을 지정하고 Attend_at 타임스탬프를 사람이 읽을 수 있는 형식으로 변환하거나 '-'(있는 경우)로 변환합니다. 비어 있는.

이 접근 방식의 이점

  • 성능: 이 접근 방식은 SQL의 정렬 기능을 활용하여 대규모 데이터 세트에 효율적입니다.
  • 가독성: 원시 SQL 표현식과 함께 orderByRaw()를 사용하면 코드가 간결하고 이해하기 쉽습니다.
  • 유연성: 이 논리를 쉽게 확장하여 다른 필드별로 정렬하거나 더 복잡한 조건을 포함할 수 있습니다.

결론

Laravel에서 NULL 또는 빈 값을 사용한 정렬을 처리하는 것은 항상 완료되지 않을 수 있는 데이터로 작업할 때 일반적인 작업입니다. Attention_at IS NULL, Attention_at DESC와 같은 SQL 표현식과 함께 orderByRaw() 메서드를 사용하면 나머지 데이터를 의미 있는 방식으로 정렬하는 동시에 NULL 값이 있는 행이 맨 아래에 나타나는지 쉽게 확인할 수 있습니다.

이 방법은 이 예에 표시된 것처럼 출석을 처리하는 시나리오에서 특히 유용하지만 일부 데이터 필드가 누락될 수 있는 다른 많은 상황에도 적용될 수 있습니다. 이 접근 방식을 사용하면 사용자에게 애플리케이션의 레코드를 더욱 명확하고 직관적으로 표시할 수 있습니다.

즐거운 코딩하세요!

릴리스 선언문 이 기사는 https://dev.to/nasrulhazim/sorting-rows-with-empty-values-at-the-bottom-and-non-empty-values-in-descending-order-in-laravel-에서 재현됩니다. 2ao9? 1침해 내용이 있는 경우, [email protected]으로 연락하여 삭제해 주시기 바랍니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3