Laravel Eloquent는 날짜별로 정렬하고 순위가 매겨진 인덱스별로 항목을 저장합니다.
P粉002023326
P粉002023326 2023-08-30 14:46:23
0
2
447
<p>Laravel을 사용하여 프로젝트를 구축하고 있으며 모든 제품이 포함된 테이블이 있습니다. 이 테이블에는 매일 제품이 추가되며 <code>created_at</code>별로 정렬된 페이지에 모든 제품이 표시됩니다. 이는 Laravel Eloquent 및 <code>->orderBy('created_at', 'DESC')</code>를 사용하여 쉽게 수행할 수 있습니다. </p> <p>그러나 특정 제품을 특정 위치에 "고정"/"고정"할 수 있었으면 좋겠습니다. 이를 위해 반환된 쿼리 컬렉션에 제품이 포함해야 하는 번호가 포함된 <code>rank_index</code> 열을 만들었습니다. </p> <p>현재 테이블은 다음과 같습니다.</p> <pre class="brush:php;toolbar:false;">제목 순위_색인 생성_at 멋진 제품입니다 2023-01-01 10:04:00 다른 상품 4 2023-01-01 10:00:00 아기자동차 2023-01-01 10:05:00 그린카펫 2 2023-01-01 10:08:00 장난감 2023-01-01 10:07:00</pre> <p>다음 표는 쿼리에서 반환할 컬렉션을 보여줍니다. </p> <pre class="brush:php;toolbar:false;">제목 순위_색인 생성_at 장난감 2023-01-01 10:07:00 그린카펫 2 2023-01-01 10:08:00 아기자동차 2023-01-01 10:05:00 다른 상품 4 2023-01-01 10:00:00 멋진 제품입니다 2023-01-01 10:04:00</pre> <p>데이터베이스에서 직접 테이블을 반환할 수 있는 솔루션이 있기를 바랍니다. 이렇게 하면 요청을 훨씬 느리게 만드는 컬렉션을 분할하고 슬라이스할 필요가 없습니다! 그렇지 않으면 PHP 함수를 사용하여 컬렉션을 재배열하고 분할하고 슬라이스해야 합니다. </p> <p>어떤 도움이라도 기꺼이 드리겠습니다! </p> <p>감사합니다</p>
P粉002023326
P粉002023326

모든 응답(2)
P粉662802882

저는 거의 확실하게 은용액을 선택하겠습니다

귀하의 진술:

말도 안 돼요. 두 결과 세트를 함께 분할/슬라이싱/연결하는 것은 성능에 측정 가능한 영향을 미치지 않을 것입니다. 확실히 "요청이 느려지는" 것은 아닙니다!

이것은 귀하의 시나리오에 맞는 SQL 솔루션이지만 관련된 테이블의 크기에 따라 두 개의 결과 집합을 함께 연결하는 것보다 속도가 거의 확실히 느립니다.

으아악

장난감이 1000개보다 많으면 여기에 설명된 대로 재귀 cte가 기본값 cte_max_recursion_length에 도달합니다.

위 쿼리 앞에 다음 명령을 실행하여 제한을 제거할 수 있습니다.

으아악

또는 toys 테이블에서 "nofollow noreferrer">ROW_NUMBER()를 사용하여 재귀 CTE를 비재귀 CTE로 변경합니다.

으아악

이것은 당신이 가지고 놀 수 있는 dbfiddle입니다.

P粉571233520

올해에는 쿼리에서 직접 정렬하는 것이 더 복잡합니다. MySQL 결과 세트는 고정 위치별로 정렬됩니다복잡성을 자세히 이해하고 싶다면 이 질문을 참조하세요.

이전에 했던 작업은 비교적 간단하고 두 가지 쿼리를 통해 완성되었는데,

  • 첫 번째는 현재 페이징 범위 내에서 고정된 항목을 쿼리하는 것입니다.
  • 두 번째 쿼리는 날짜별로 정렬된 표준 페이징 쿼리입니다.
  • 그런 다음 고정된 항목을 페이지가 매겨진 쿼리에 푸시하고 해당 열 값을 기반으로 인덱스를 사용합니다.

다음은 참고할 수 있는 예시입니다

으아악
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿