У меня есть 2 таблицы, первая таблица - пользовательская, а вторая таблица - user_attendance.
В посещаемости пользователя я вставляю IN и OUT для каждой строки, поэтому 1 строка для IN и 1 строка для OUT.
Я хочу выбрать MySQL (так что мне не нужно делать это на Php), который будет зацикливаться для каждого идентификатора пользователей и получать последние OUT и первые IN этого пользователя в пользовательской таблице.
Я попытался сделать это на Php, выбрав сначала все идентификаторы в пользователе и зациклив его через php и выбрав 1-й вход и последний из этого идентификатора в посещаемости. Вот так.
$userCreds = DB::table('users')->select('user_id', 'username')->get();
$emailBody = '<table border="1"><thead><tr><th>Employee ID</th><th>Employee Name</th><th>Date</th><th>IN</th><th>OUT</th></tr></thead><tbody>';
foreach ($userCreds as $userCred) {
$userAttendance = DB::select(
DB::raw(
"SELECT username,
(
SELECT TIME_FORMAT(time(b.server_time), '%r')
FROM `users` a
LEFT JOIN user_attendance b
ON a.user_id = b.user_id
WHERE a.user_id = $userCred->user_id
AND (b.server_time between '$ysDate' and '$yeDate')
AND b.action = 'IN' ORDER BY b.server_time ASC LIMIT 1
) as TimeIn,
(
SELECT TIME_FORMAT(time(b.server_time), '%r')
FROM `users` a
LEFT JOIN user_attendance b
ON a.user_id = b.user_id
WHERE a.user_id = $userCred->user_id
AND (b.server_time between '$ysDate' and '$yeDate')
AND b.action = 'OUT' ORDER BY b.server_time DESC LIMIT 1
) as TimeOut
FROM users
WHERE user_id = $userCred->user_id"
)
);
$emailBody .= '<tr><td>'.$userCred->user_id.'</td><td>'.$userCred->username.'</td><td>'.date('Y-m-d',(strtotime ( '-1 day' , strtotime ( $date) ) )).'</td><td>'.$userAttendance[0]->TimeIn.'</td><td>'.$userAttendance[0]->TimeOut.'</td></tr>';
}
Вместо того, чтобы делать это на Php, я хочу, чтобы это было сделано на стороне Mysql, чтобы я мог на самом деле создать представление, которое будет сохраняться когда-либо сейчас и сделано для целей записи.
Что мне нужно, так это
таблица пользователей
user_id |имя пользователя
01 |поросёнок
02 |Пух
03 |тигр
таблица user_attendance
user_id |серверное время |действие
01 |2019-10-10 08:00:00 |IN
01 |2019-10-10 09:00:00 |OUT
01 |2019-10-10 10:00:00 |IN
01 |2019-10-10 18:00:00 |OUT
02 |2019-10-10 07:45:00 |IN
02 |2019-10-10 09:00:00 |OUT
02 |2019-10-10 10:00:00 |IN
02 |2019-10-10 19:50:00 |OUT
Результат будет
user_id |дата |IN |OUT
01 |2019-20-10 |08:00:00 |18: 00: 00
02 |2019-20-10 |07:45:00 |19: 50: 00