Mysql 检查用户是否已打卡进入或退出

Mysql 检查用户是否已打卡进入或退出,mysql,sql,Mysql,Sql,我有一个员工表,里面有名字、姓氏等基本信息。。每个员工都有一个唯一的ID 然后我有两张桌子,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.conta

我有一个员工表,里面有名字、姓氏等基本信息。。每个员工都有一个唯一的ID

然后我有两张桌子,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

我从逻辑上考虑过,如果我不检查rwh_clock_in在rwh_clock_out中是否有任何行在时间之后,我就不知道用户是否已打卡下班。因此,我需要在时钟进入时间之后首先检查该用户ID是否有任何时钟退出。如果它存在,则用户不打卡,如果不存在,则用户打卡

任何帮助都将不胜感激

更新:


现在,即使用户被打卡,打卡时间也始终为空

您似乎希望从每个表中获得给定用户的最新时间。我想提出更多的建议:

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;

employee.contactEmail.后缺少逗号。。它应该是employee.contactEmail,CASE WHEN clockin.atTime>clockout.atTime然后0或1结束为'clockedIn',您需要将contactEmail和括号分开,否则它将被视为一个函数。我根本没有看到,当我添加时它会工作,并将>更改为锁定或计时?无论哪种方式,我强烈建议您只使用一个表,用一列来确定用户是否打卡。我得到一个错误cio.userid不存在于fieldtable中,userid不存在于fieldtable中
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;