2016-07-19 121 views
2

我有

一個包含壞數據的用戶表。 我想循環並刪除email的重複記錄,並保留有記錄lowerid刪除重複的記錄,並保留一個較低的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();

返回我想保留的所有記錄。


現在有點卡住,任何提示將非常感激

+0

什麼是$電子郵件? –

+0

對不起,請忽略。我會把它拿下來,我正在試着玩弄數據。 – ihue

回答

4

嘗試是這樣的

// 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(具有唯一的電子郵件) ,然後讓所有用戶通過它們循環。刪除每個不在其中的用戶。

UPDATE

由於上查詢似乎沒有在這裏工作是我想嘗試(沒有最終veryfied)

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

這將只返回一行。你需要'通過電子郵件羣' – Peter

+0

@Peter:我得到了同樣的結果'數組:1 [▼ 0 => 1 ]' – ihue

+0

@Frank:我們需要使用group by嗎? – ihue

相關問題