删除重复记录,并保留ID较低的记录

时间:2016-07-19 14:12:57

标签: php laravel laravel-5

我有

包含错误数据的用户表。 我希望循环播放并删除email中的重复记录,并保留包含lower ID 的记录。

enter image description here

我想只保留id:1,14,1004,1005,1003,1006和1007.

我已经尝试了

$users = DB::table('users')->where('id', DB::raw("(select min(`id`) from users)"))->get();

foreach ($users as $user) {
    if ( ???? )) { // <---- I'm not sure what to put here. 
        $user->delete();
    }
}

我注意到了

$users = DB::table('users')->groupBy('email')->get();

返回我要保留的所有记录。

现在有点卡住了,任何提示都会非常感激

1 个答案:

答案 0 :(得分:4)

尝试这样的事情

collections.defaultdict

首先列出具有最小ID的用户的所有ID(使用唯一的电子邮件),然后获取所有用户并循环访问它们。删除每个id不在其中的用户。

<强>更新

因为上面的查询似乎不起作用,所以我会尝试(最终没有完成)

// get users with min id
$ids= DB::table('users')->where('id', DB::raw("(select min(`id`) from users)"))->lists('id');

// get all users
$users = \App\User::all();

foreach ($users as $user) {
    if (!in_array($user->id, $ids)) {
        $user->delete();
    }
}