Вы можете объединить таблицу записей дважды, а во втором соединении сдвинуть идентификатор на 1. Затем вы можете сравнить, если r1.type = r2.type, что означает, что последовательные строки в столбце типа совпадают.
Кроме того, вам нужно сделать выбор в этом случае.
Он должен выглядеть примерно так:
DB::table('users')
->select('users.*', 'r1*')
->join('records_dev.records r1', 'users.id', '=', 'r1.user_id')
->join('records_dev.records r2', function ($join) {
$join->on('r1.user_id', '=', '(r2.user_id - 1)')
->where('r1.type', '=', 'r2.type');
})
->get()->toArray();
или примерно так:
DB::table('users')
->select('users.*', 'r1*')
->join('records_dev.records r1', 'users.id', '=', 'r1.user_id')
->join('records_dev.records r2', 'r1.user_id', '=', '(r2.user_id - 1)')
->where('r1.type', '=', 'r2.type')
->get()->toArray();
Этопредполагается, что в столбце user_id в таблице записей нет пробелов.Если пробел существует, вы можете добавить новый столбец в таблицу записей и упорядочить его (1, 2, 3, ...).Затем используйте этот столбец вместо user_id следующим образом (если имя нового столбца seq):
$join->on('r1.seq', '=', '(r2.seq - 1)')