라라벨: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\Builder
instance)를 클릭합니다.(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
'programing' 카테고리의 다른 글
Python 다중 처리 Pickling Error:절일 수 없다 (0) | 2022.12.27 |
---|---|
시퀀스 번호로 열 업데이트 mysql (0) | 2022.12.27 |
휴지 상태 타임스탬프 - 밀리초 정밀도 (0) | 2022.12.27 |
메서드를 array_map 함수로 사용할 수 있습니까? (0) | 2022.12.27 |
MySQL에서 400000부터 시작하는 새 열을 채우는 방법 (0) | 2022.12.27 |