Laravel Eloquent는 날짜별로 정렬하고 순위가 매겨진 인덱스별로 항목을 저장합니다.
P粉002023326
2023-08-30 14:46:23
<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>
저는 거의 확실하게 은용액을 선택하겠습니다
귀하의 진술:
말도 안 돼요. 두 결과 세트를 함께 분할/슬라이싱/연결하는 것은 성능에 측정 가능한 영향을 미치지 않을 것입니다. 확실히 "요청이 느려지는" 것은 아닙니다!
이것은 귀하의 시나리오에 맞는 SQL 솔루션이지만 관련된 테이블의 크기에 따라 두 개의 결과 집합을 함께 연결하는 것보다 속도가 거의 확실히 느립니다.
으아악장난감이 1000개보다 많으면 여기에 설명된 대로 재귀 cte가 기본값 cte_max_recursion_length에 도달합니다.
위 쿼리 앞에 다음 명령을 실행하여 제한을 제거할 수 있습니다.
으아악또는 toys 테이블에서 "nofollow noreferrer">ROW_NUMBER()를 사용하여 재귀 CTE를 비재귀 CTE로 변경합니다.
으아악이것은 당신이 가지고 놀 수 있는 dbfiddle입니다.
올해에는 쿼리에서 직접 정렬하는 것이 더 복잡합니다. MySQL 결과 세트는 고정 위치별로 정렬됩니다복잡성을 자세히 이해하고 싶다면 이 질문을 참조하세요.
이전에 했던 작업은 비교적 간단하고 두 가지 쿼리를 통해 완성되었는데,
다음은 참고할 수 있는 예시입니다
으아악