#laravel #eloquent #greatest-n-per-group
#laravel #eloquent #наибольшее число пользователей на группу
Вопрос:
Как мне получить последние / последние данные каждого конкретного идентификатора пользователя.
Таблица отправки
ID | идентификатор пользователя | Статус | created_at | updated_at |
---|---|---|---|---|
1 | 3 | повторить | somedatetime | somedatetime => dont want this |
2 | 3 | повторить | somedatetime | somedatetime |
3 | 4 | повторить | somedatetime | somedatetime |
4 | 5 | повторить | somedatetime | somedatetime |
Идентификатор 2 не является избыточностью. Я отслеживаю записи. Мне нужно захватить идентификатор 2,3,4. Я пробовал использовать
Submission::where('status','redo')->distinct('user_id')->get();
но он возвращает все значение
Обновить
Для справочных целей здесь приведена реальная структура таблицы
как вы можете видеть, user_id 78 имеет 2 повтора, которые равны 89 и 90. Я пытаюсь получить последнюю / последнюю, которая равна 90.
Комментарии:
1. попробуйте что-то вроде этого
Submission::where('status','redo')->latest()->groupBy('user_id')->get();
2. @Joseph Я получаю идентификатор 1 вместо 2
3. не могли бы вы добавить результат, пожалуйста
4. @Joseph попробуйте проверить мое обновление. Спасибо
5. вы хотите получить последнюю запись для данного пользователя или последнюю запись для всех пользователей?
Ответ №1:
вы можете получить последние идентификаторы, а затем получить полные записи:
$max_ids = Submission::query()
->where('status','redo')
->select('user_id', DB::raw('max(id) max_ids'))
->groupBy('user_id')->pluck('max_ids');
$lasts = Submission::whereIn('id', $max_ids)->get();
Ответ №2:
Вы можете попробовать это с помощью вложенного запроса:
Submission::from(Submission::orderBy('id', 'desc'), 't')
->groupBy('user_id')
->get();
Вероятно, придется внести коррективы, не проверенные, но идея заключается в том, что вспомогательный запрос получит упорядочение, тогда основной запрос выполнит группировку.
Комментарии:
1. не могли бы вы объяснить, что такое
t
буква во втором атрибутеfrom
метода? мне нравится этот ответ, ты — род