php - 删除重复的记录,保留id较低的记录

标签 php laravel laravel-5

我有

包含错误数据的用户表。我想循环遍历并删除 email 方面的重复记录,并保留 较低 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();

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

最佳答案

尝试这样的事情

// 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();
    }
}

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

更新

由于上面的查询似乎不起作用,所以我会尝试这样做(最终不是veryfied)

DB::table('users')->select('id', DB::raw('min("id") as lowest_id, email'))->groupBy('email')->lists('id')

关于php - 删除重复的记录,保留id较低的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38461014/

相关文章:

php - where OR where mysql - 带有两个 where 子句的 mysql 查询

php - 将数据保存到数据库后隐藏按钮

php - Azure cdn IP地址限制可能吗?

php - 仅 Mysql 原始计数

php - Laravel-5 每个日志表的独立模型

javascript - PHP 包含后 JQuery 不更新 CSS 元素

php - 如何在 Laravel 中验证最大文件大小?

php - 在 WHERE 中应用 OR 子句或在 Eloquent laravel 中应用 HAVING

php - Laravel 5 加入表并选择热门类别

laravel-5 - 如何在Laravel中删除表?