php - 具有多个where和join操作的Mysql Insert查询

标签 php mysql inner-join

需要插入到表 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

需要通过从时钟表计算时间 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 
);

最佳答案

我还是不明白,但至少看到了一些关系。下面的查询将返回所有员工的数据集和他们每个人的所有假期(h.date 列应该进入 cur_date 表)。最后一个 JOIN 没有任何关系,因此它创建笛卡尔积 - 为每个已构建的行附加每个假期(总行数 = 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 小时)?
  • 不知道您为什么要计算/搜索这 8 小时 - 您想为员工插入假期吗?仅工作 8 小时(根据“时钟”/任何一天)
  • 不知道 cur_date 是什么(假设是假期),但为什么要在 datetime 旁边使用 date - 也不应该是time or date or datetime only?

关于php - 具有多个where和join操作的Mysql Insert查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37767062/

相关文章:

php - 从本地主机到实时服务器的 PHP 套接字编程

php - 更新我的数据库表条目时发生错误

mysql - 中文字符的 Unicode 字符问题

c# - 将 orderby 应用于 C# LINQ 内连接

PHP 文件上传总是返回 MIME 类型 "inode/x-empty"

mysql - osx mariaDB 如何设置 max_allowed_pa​​cket

mysql - 填补 Mysql 中数据范围之间的空白

mysql - 如果第二个表中的条件为真,则从第一个表中选择 1 条记录(所有引用行均处于事件状态 = 0)

mysql - 表上的多个内部联接,其中行表示数据属性

php一段时间后插入数据