需要在表格public_holidays中插入与假日表日期匹配的给定日期,它应该与CLOCK表clock_in和clock_out时间字段匹配,并且在28800 = 8小时内以秒为单位获取时间差,并且还需要匹配来自用户的指定表表user_id,对不起代码非常混乱,大大困惑任何帮助都非常有用,谢谢。
时钟表
id user_id date clock_in clock_out created_at updated_at
6 12 2016-06-10 2016-06-10 06:00:00 2016-06-10 14:00:00 2016-06-10 19:20:41 2016-06-10 00:15:51
用户
id first_name last_name designation_id email
1 crysis name 1 crysis@gmail.com
假期
id date holiday_description created_at updated_at
1 2016-06-10 christmas 2016-06-11 15:23:54 2016-06-11 15:23:54
指定
designation_id department_id designation created_at updated_at
1 1 employee 2016-01-30 21:03:24 2016-01-30 22:03:24
系
department_id department_name department_description created_at updated_at
1 IT Info tech 2016-01-30 21:03:24 2016-01-30 21:03:24
需要通过计算时钟表中的时间8小时以下格式插入此表Public_holidays
user_id department_id designation_id date_cur clock_in clock_out created_at updated_at
12 1 1 2016-06-13 2016-06-10 06:00:00 2016-06-10 14:00:00 2016-06-13 21:03:24 2016-06-13 21:03:24
尝试凌乱的代码
INSERT INTO public_holidays (user_id, department_id,designation_id,clock_in,clock_out) SELECT(cl.user_id,
di.department_id,
di.designation_id,
cl.clock_in,
cl.clock_out)
FROM clock cl, designations di
where
(
select h1.date AS ph_date from holidays h1 WHERE ph_date = 2015-01-22
AND
select (TIMESTAMPDIFF(second,cl.clock_in, cl.clock_out)=28800) AS differ1
AND
INNER JOIN users AS ui ON ui.designation_id = di.id
);
答案 0 :(得分:1)
我仍然没有理解,但至少看到了一些关系。下面的查询将返回所有员工的数据集以及每个员工的所有假期(h.date
列应该进入cur_date
表)。最后JOIN
没有关系,因此它创建了笛卡尔积 - 为每个已构造的行附加每个假期(总行数= nuber of empl x假期数)
SELECT cl.user_id, di.department_id, di.designation_id, h.date, cl.clock_in, cl.clock_out
FROM clock cl
INNER JOIN users u ON cl.user_id = u.user_id
INNER JOIN designation di ON u.designation_id = u.user_id
CROSS JOIN holidays h --cartesian product: all dates for each row
clock
表是什么 - 标准工作时间(每个员工一行 - 我认为这是真的),每日时间表(每个员工每个日期一行)还是其他?如果是标准工作时间,那么为什么datetime
而不是time
?如果它的每日时间表我应该如何决定你选择哪个8小时(为什么8小时)?cur_date
是什么(假设是假期),但为什么在date
旁边使用datetime
- 不应该是time
或仅date
或datetime
?答案 1 :(得分:0)
最后这个工作@shudder谢谢你的帮助
INSERT INTO public_holidays (user_id, department_id,designation_id,date_cur,clock_in,clock_out)
SELECT cl.user_id, des.department_id , us.designation_id, cl.date,cl.clock_in, cl.clock_out
FROM clock cl
INNER JOIN holidays AS hol ON hol.date = cl.date
INNER JOIN users AS us ON cl.user_id = us.id
INNER JOIN designations AS des ON des.id = us.designation_id
WHERE date(cl.created_at) = '2016-06-13'
AND TIMESTAMPDIFF(second,cl.clock_in, cl.clock_out) = 28800;