【发布时间】:2016-06-11 18:12:08
【问题描述】:
需要在给定日期之前插入到表 public_holidays 与假期表日期匹配,它应该匹配 CLOCK 表 clock_in 和 clock_out 时间字段并获取 28800 = 8hrs 的时间差(以秒为单位),还需要匹配用户的指定表表 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
需要通过从时钟表计算时间 8hrs 以下面的格式将 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
);
【问题讨论】:
-
你的代码在结构和语义上都是错误的......你应该首先从你需要的表和这些表之间的关系开始,然后定义 where 条件......最后选择列
-
MySQL 讨厌子查询,即使您要加入子查询,也要尽可能尝试加入。黄金法则是,如果要加入列,则需要在列上建立索引..
-
忘掉
INSERT,直到你得到你的SELECT。在一些数据库管理器(甚至 phpMyAdmin)中测试查询以获得正确的结果集(没有重复的行)。 select statemetnt 中使用的所有表都应该以某种方式关联,加入该关系并直接用于数据或在WHERE子句或关系本身中的字段上过滤结果。 (可以在IN()子句中使用子查询,但这会造成混乱)。hollidays表与查询无关。语法也是错误的——users都应该加入到选定的表中,而这些表也不相关。 RTFM。 -
@shudder 你能不能展示一个像你这样的示例查询。
-
显示数据结构
标签: php mysql inner-join