Проверка того, включен или нет пользователь - PullRequest
0 голосов
/ 04 июня 2018

У меня есть таблица сотрудников, в которой хранится основная информация, такая как имя, фамилия и т. Д. Каждому сотруднику присваивается уникальный идентификатор.

У меня есть две таблицы: rwh_clock_in и rwh_clock_out, которые выглядят какнапример:

id (int) 255 PRIMARY A_I
atTime (timestamp) DEFAULT_TIMESTAMP
userid (int) 255

Я пытаюсь выбрать информацию о пользователях из базы данных, а затем также проверить, включен ли пользователь или нет.

SELECT employee.forename, employee.surname, employee.contactNumber, employee.contactEmail
(CASE WHEN clockin.atTime > clockout.atTime THEN 0 ELSE 1 END) AS 'clockedIn'
FROM rwh_employers employee
LEFT JOIN rwh_clock_in clockin
ON employee.id = employee.id AND employee.id = clockin.userid
LEFT JOIN rwh_clock_out clockout
ON employee.id = employee.id AND employee.id = clockout.userid AND clockin.userid = clockout.userid
WHERE employee.id = 1

Однако я получаюошибка SQL, которая гласит:

1305 - ФУНКЦИЯ employee.contactEmail не существует

Моя таблица rwh_employers на самом деле имеет столбец contactEmail, который является VARCHAR(120).

Я думал об этом логически, я не буду знать, отключился ли пользователь или нет, если я не проверю, есть ли какие-либо строки после atTime от rwh_clock_in в rwh_clock_out.Итак, мне нужно сначала проверить, нет ли каких-либо выходов из этого идентификатора пользователя по истечении времени.Если он существует, то пользователь не синхронизируется, если нет, то пользователь синхронизируется.

Любая помощь будет принята.

ОБНОВЛЕНИЕ:

SELECT employee.forename, employee.surname, employee.contactNumber, employee.contactEmail, clockin.atTime,
(CASE WHEN clockin.atTime < clockout.atTime THEN clockout.atTime ELSE NULL END) AS 'clockOut'
FROM rwh_employers employee
LEFT JOIN rwh_clock_in clockin
ON employee.id = employee.id AND employee.id = clockin.userid
LEFT JOIN rwh_clock_out clockout
ON employee.id = employee.id AND employee.id = clockout.userid AND clockin.userid = clockout.userid
WHERE employee.id = 1
ORDER BY clockout.atTime ASC LIMIT 1

Теперь clockout всегда равен NULL, даже когда пользователь выключен

1 Ответ

0 голосов
/ 04 июня 2018

Похоже, вы хотите получить самое позднее время для данного пользователя из каждой таблицы.Я хотел бы предложить что-то еще в этом направлении:

select cio.user_id,
       (case when last_ci < last_co then 'checked_out'
             else 'checked_in'
        end) as which
from (select 1 as user_id,
             (select max(atTime) from rwh_clock_in where user_id = 1) as last_ci,
             (select max(atTime) from rwh_clock_ou where user_id = 1) as last_co
     ) cio;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...