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