programing

라라벨:DB에서 마지막 N개 항목을 가져오는 방법

firstcheck 2022. 12. 27. 21:51
반응형

라라벨:DB에서 마지막 N개 항목을 가져오는 방법

내 DB에 개 테이블이 있는데 검색하려고 합니다.

제가 찾은 유일한 방법은 다음과 같습니다.

Dogs:all()->where(time, <=, another_time);

다른 방법은 없나요?예를 들면 이런 거Dogs:latest(5);

협조해 주셔서 감사합니다.

다음과 같은 작업을 수행할 수 있습니다.

$dogs = Dogs::orderBy('id', 'desc')->take(5)->get();

사용하다orderBy와 함께Descending주문하고 제일 먼저 가져가다n레코드의 수

갱신(이후)latest메서드가 추가되었습니다).

$dogs = Dogs::latest()->take(5)->get();

청결을 위한 저의 솔루션은 다음과 같습니다.

Dogs::latest()->take(5)->get();

일반적인 업무 처리를 위해 내장된 방법을 사용하는 것만으로 다른 답변과 동일합니다.

Dogs::orderBy('created_at','desc')->take(5)->get();

음의 정수 n을 전달하면 마지막 n개의 요소를 얻을 수 있습니다.

Dogs::all()->take(-5)

테이블이 클 때 좋지 않은 순서를 사용하지 않기 때문에 좋습니다.

다음과 같이 시도할 수도 있습니다.

$recentPost = Article::orderBy('id', 'desc')->limit(5)->get();

라라벨 5.6에서는 잘 되고 있어요.

더 깔끔하게 사용할 수 있기 때문에 이렇게 사용합니다.

$covidUpdate = COVIDUpdate::latest()->take(25)->get();

같은 결과를 얻을 수 있는 솔루션을 생각해 냈습니다.array_slice()방법.내 코드로 나는 했다.array_slice( PickupResults::where('playerID', $this->getPlayerID())->get()->toArray(), -5 );와 함께-5나는 질의의 마지막 5개의 결과를 원했다.

Alpha의 솔루션은 매우 우아하지만 수집 수준에서 메모리 내 정렬을 피하기 위해 SQL을 사용하여 데이터베이스의 결과를 다시 정렬(오름차순)해야 하는 경우가 있습니다.이러한 작업을 수행하려면 SQL 서브쿼리를 사용하는 것이 좋습니다.

Laravel이 다음과 같은 이상적인 코드를 사용한다면 서브쿼리를 만들고 싶다는 것을 인식할 수 있을 만큼 똑똑하다면 좋을 텐데...

$dogs = Dogs::orderByDesc('id')->take(5)->orderBy('id')->get();

...단, 이는 경합하는 단일 SQL 쿼리로 컴파일됩니다.ORDER BY이 상황에서 필요한 서브쿼리 대신 절을 지정합니다.

Larabel에서 서브쿼리를 작성하는 것은 유감스럽게도 다음과 같은 유사 코드만큼 사용하기 쉽지 않습니다.

$dogs = DB::subQuery( 
    Dogs::orderByDesc('id')->take(5) 
)->orderBy('id');

...단, 다음 코드를 사용하여 동일한 결과를 얻을 수 있습니다.

$dogs = DB::table('id')->select('*')->fromSub(
    Dogs::orderByDesc('id')->take(5)->toBase(), 
    'sq'
)->orderBy('id');

이를 통해 필요한 데이터가 생성됩니다.SELECT * FROM (...) AS sq ...sql subquery constructure 및 코드 가독성 측면에서 상당히 깨끗합니다.)

의 사용에 특히 주의해 주십시오.->toBase()기능 - 이 기능이 필요한 이유는fromSub()웅변 모델을 사용하는 것을 좋아하지 않는다.Eloquent\Builder인스턴스(instance)가 필요한 것 같습니다.Query\Builderinstance)를 클릭합니다.(https://github.com/laravel/framework/issues/35631) 참조).

다른 사람에게 도움이 되었으면 합니다.저도 몇 시간을 들여서 이 일을 해냈기 때문입니다.(특정 상황에서는 마지막 몇 행으로 제한해야 하는 복잡한 SQL 쿼리 빌더 표현식이 있었습니다).

데이터베이스에 방금 삽입된 요청 헤더에서 최신 데이터 레코드를 가져오는 상황을 상상해 보십시오.

$noOfFilesUploaded = count( $request->pic );// e.g 4
$model = new Model;

$model->latest()->take($noOfFilesUploaded); 

입니다.take()helper 함수는 요청을 통해 방금 전송된 배열 데이터의 수를 가져옵니다.

할 수 있는 것은 「」뿐입니다.id음음음같 뭇매하다

$model->latest()->take($noOfFilesUploaded)->puck('id')

DB에서 마지막 항목 가져오기

$variable= Model::orderBy('id', 'DESC')->limit(1)->get();

use DB;

$dogs = DB::select(DB::raw("SELECT * FROM (SELECT * FROM dogs ORDER BY id DESC LIMIT 10) Var1 ORDER BY id ASC"));

언급URL : https://stackoverflow.com/questions/24860973/laravel-how-to-get-last-n-entries-from-db

반응형