Laravel Eloquent는 날짜별로 정렬하고 순위가 매겨진 인덱스별로 항목을 저장합니다.
P粉002023326
P粉002023326 2023-08-30 14:46:23
0
2
358

Laravel을 사용하여 프로젝트를 구축하고 있으며 모든 제품이 포함된 테이블이 있습니다. 이 테이블에는 매일 제품이 추가되며 created_at별로 정렬된 페이지에 모든 제품이 표시됩니다. 이는 Laravel Eloquent 및 ->orderBy('created_at', 'DESC')를 사용하여 쉽게 수행할 수 있습니다.

그러나 특정 제품을 특정 위치에 "고정"/"고정"할 수 있었으면 좋겠습니다. 이를 위해 반환된 쿼리 컬렉션에 제품이 포함해야 하는 번호가 포함된 rank_index 열을 만들었습니다.

현재 테이블은 다음과 같습니다.

제목 순위_색인 생성_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

다음 표는 쿼리에서 반환할 컬렉션을 보여줍니다.

제목 순위_색인 생성_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

데이터베이스에서 직접 테이블을 반환할 수 있는 솔루션이 있기를 바랍니다. 이렇게 하면 요청을 훨씬 느리게 만드는 컬렉션을 분할하고 슬라이스할 필요가 없습니다! 그렇지 않으면 PHP 함수를 사용하여 컬렉션을 재배열하고 분할하고 슬라이스해야 합니다.

어떤 도움이라도 기꺼이 드리겠습니다!

감사합니다

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 결과 세트는 고정 위치별로 정렬됩니다복잡성을 자세히 이해하고 싶다면 이 질문을 참조하세요.

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

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

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

    으아악
      최신 다운로드
      더>
      웹 효과
      웹사이트 소스 코드
      웹사이트 자료
      프론트엔드 템플릿
      회사 소개 부인 성명 Sitemap
      PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!