Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Laravel nhận bản ghi mới nhất cho mỗi nhóm

Bạn có thể viết lại truy vấn của mình dưới dạng kết hợp trái để nhận được kết quả tương tự

select a.* 
from part_histories a
left join part_histories b on a.part_id = b.part_id 
                            and a.created_at < b.created_at
where b.part_id is null

và tôi đoán bạn có thể dễ dàng chuyển đổi truy vấn phía trên trong phạm vi của mình, chẳng hạn như

public function scopeWithLatestStatus($query)
{
    return $query->leftJoin('part_histories as b', function ($join) {
                $join->on('a.part_id', '=', 'b.part_id')
                     ->where('a.created_at', '<', 'b.created_at');
            })
        ->whereNull('b.part_id')
        ->from('part_histories as a')
        ->select('a.*');
}

Laravel Eloquent select tất cả các hàng có max create_at

Laravel - Nhận mục nhập cuối cùng của mỗi loại UID

Nhóm Laravel Eloquent theo hồ sơ gần đây nhất

Chỉnh sửa bằng cách sử dụng truy vấn trên vì has mối quan hệ, Để có được lịch sử mới nhất cho từng phần, bạn có thể xác định một hasOne mối quan hệ như

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
class Part extends Model
{
    public function latest_history()
    {
        return $this->hasOne(\App\Models\PartHistory::class, 'part_id')
            ->leftJoin('part_histories as p1', function ($join) {
                $join->on('part_histories.part_id', '=', 'p1.part_id')
                    ->whereRaw(DB::raw('part_histories.created_at < p1.created_at'));
            })->whereNull('p1.part_id')
            ->select('part_histories.*');
    }
}

Và sau đó để tải các phần có lịch sử mới nhất của chúng, bạn có thể tải lên bản đồ được xác định ở trên là

$parts = Part::with('latest_history')->get();

Bạn sẽ có danh sách các phần cùng với lịch sử mới nhất là

Array
(
    [0] => Array
        (
            [id] => 1
            [title] => P1
            [latest_history] => Array
                (
                    [id] => 6
                    [created_at] => 2018-06-16 08:25:10
                    [status] =>  1
                    [part_id] => 1
                )

        )
....
)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Thủ tục lưu trữ MySQL với các tham số

  2. Cách giám sát việc triển khai MySQL với Prometheus &Grafana tại ScaleGrid

  3. tìm kiếm mysql không có dấu cách

  4. Tính số dặm của phương tiện bằng cách trừ đi số đọc phương tiện

  5. Làm thế nào để nói tạo thủ tục nếu không tồn tại trong MySQL