Привет у меня есть проект Laravel и у меня есть эта модель

User_attendance

User

И у меня есть это отношение внутри User

public function getAttendance()
{
    return $this->hasMany('App\User_attendance','user_attendance_user_id','id');
}

Теперь есть дубликаты данных в посещаемости пользователей, как это

9238<><> 2018-11-27 17:45:48
9238<><> 2018-11-27 17:45:48
9238<><> 2018-11-27 17:45:48
9238<><> 2018-11-27 17:45:48
9238<><> 2018-11-27 17:45:48
9238<><> 2018-11-27 17:45:48
9238<><> 2018-11-27 17:45:48
9238<><> 2018-11-27 17:45:48
9238<><> 2018-11-27 17:45:48
9238<><> 2018-11-27 17:45:48
9238<><> 2018-11-27 17:45:48
9238<><> 2018-11-27 17:45:48
9238<><> 2018-11-27 17:45:48
9238<><> 2018-11-28 17:35:00
9238<><> 2018-11-29 17:44:34
9238<><> 2018-12-08 17:18:12
9238<><> 2018-12-08 17:18:12

Теперь 9238<><> 2018-11-27 17:45:48 имеет 12 записей как я могу запустить запрос внутри laravel или mysql, чтобы удалить 11 записей и оставить только 1 я сделал это

$users = User::limit(30)->get();
foreach($users as $u)
{
    foreach($u->getAttendance as $attendance)
    {
        echo $attendance->user_attendance_user_id . "<><> ".$attendance->created_at ."<br />";
    }
}

Я хочу удалить дубликаты данных и оставить только одну запись спасибо

0
Awar Pulldozer 12 Дек 2018 в 12:47

3 ответа

Лучший ответ

Используйте ключевое слово DISTINCT или GROUP BY

Примере:

SELECT DISTINCT (столбец), столбец1, столбец2, ... FROM table_name;

SELECT * From User_attendance GROUP BY user_attendance_user_id, созданный_at;

1
12 Дек 2018 в 10:11

Если вы хотите удалить записи в базе данных, вы можете сделать запрос MySQL как

DELETE t1 FROM `User_attendance` as f
        INNER JOIN
    `User_attendance` as s 
WHERE
    f.id < s.id AND f.time = s.time AND f.user_attendance_user_id = s.user_attendance_user_id;

Это удалит дубликаты записей из вашей таблицы. Возможно, вы захотите убедиться, что вставляете новую строку только в том случае, если она уникальна, поэтому сделайте проверку в своем коде (и сделайте комбинацию столбца идентификатора пользователя и времени уникальной (т.е. индекс UNIQUE) в базе данных)

1
rpi 13 Дек 2018 в 11:36

Используйте двойную группу, например:

DB::table('users')
            ->select('*')
            ->groupBy('user_attendance_user_id','created_at')
            ->get();
1
pr1nc3 12 Дек 2018 в 09:55