Sql 在Laravel雄辩地获得关于副本的最新数据
因此,我尝试获取具有更高ID号的重复数据,以便删除最新的重复数据(而不是旧的重复数据) 我尝试过使用orderBy,但它不起作用Sql 在Laravel雄辩地获得关于副本的最新数据,sql,laravel,eloquent,Sql,Laravel,Eloquent,因此,我尝试获取具有更高ID号的重复数据,以便删除最新的重复数据(而不是旧的重复数据) 我尝试过使用orderBy,但它不起作用 $duplicates = MasterPayrollInput::where('periode', $month) ->orderBy('id', 'asc') ->groupBy('nip') ->havingRaw('count(*) > 1') ->get();
$duplicates = MasterPayrollInput::where('periode', $month)
->orderBy('id', 'asc')
->groupBy('nip')
->havingRaw('count(*) > 1')
->get();
$duplicatesid = array_column($duplicates->toArray(), 'id');
$todelete = array_map(function($item){ return $item[0]; }, $duplicatesid);
MasterPayrollInput::whereIn('id', $duplicatesid )->delete();
您可以使用原始查询进行相同的操作: 假设您想删除
主工资单输入中名称重复的记录
表:
id
值的行:
$result=DB::delete('delete n1 FROM master_payroll_input n1,master_payroll_input n2,其中n1.id>n2.id,n1.name=n2.name')代码>
id
值的行:
$result=DB::delete('delete n1 FROM master_payroll_input n1,master_payroll_input n2,其中n1.id
使用
其中
闭包获取组中的最大id,并通过一次查询将其删除:
MasterPayrollInput::其中('id',函数($query){
$query->from('master\u payroll\u inputs')
->groupBy(“nip”)
->havingRaw('计数(*)>1')
->选择原始('MAX(id)');
})->删除();
使用下面的查询删除重复项
$duplicateIds = MasterPayrollInput::where('periode', $month)
->orderBy('id', 'asc')
->offset(1)
->limit(10)
->pluck('id');
MasterPayrollInput::whereIn('id', $duplicateIds)->delete();
偏移-跳过要保留的第一行
限制-可能的重复数。使用
MAX
获取最新id。您应该编写查询,如按colname(col)>1的colname从tablename组中选择MAX(col)