Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在Laravel雄辩地获得关于副本的最新数据_Sql_Laravel_Eloquent - Fatal编程技术网

Sql 在Laravel雄辩地获得关于副本的最新数据

Sql 在Laravel雄辩地获得关于副本的最新数据,sql,laravel,eloquent,Sql,Laravel,Eloquent,因此,我尝试获取具有更高ID号的重复数据,以便删除最新的重复数据(而不是旧的重复数据) 我尝试过使用orderBy,但它不起作用 $duplicates = MasterPayrollInput::where('periode', $month) ->orderBy('id', 'asc') ->groupBy('nip') ->havingRaw('count(*) > 1') ->get();

因此,我尝试获取具有更高ID号的重复数据,以便删除最新的重复数据(而不是旧的重复数据)

我尝试过使用orderBy,但它不起作用

$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)