我有一个用PHP构建的报告,我需要按小时费率计算员工工资的时间差。
例如:
Employee Clock-In Clock-Out Total-Hours Rate Salary
Mike 2015-01-01 22:57:09 2015-01-02 11:48:14 12:51:05 10 128.51
Mike 2015-01-03 11:48:51 2015-01-06 22:19:27 82:30:36 10 825.10
Mike 2015-01-06 21:19:40 2015-01-06 22:00:00 00:40:20 10 6.72
我的查询在
之下SELECT tt.id,ts.fname,tt.punch_in,tt.punch_out,
SEC_TO_TIME(TIMESTAMPDIFF(SECOND,tt.punch_in,tt.punch_out)) as working_hours_new,ter.hourlyrate,
((SUBSTRING(SEC_TO_TIME(TIMESTAMPDIFF(SECOND,tt.punch_in,tt.punch_out)),1,2) + SUBSTRING(SEC_TO_TIME(TIMESTAMPDIFF(SECOND,tt.punch_in,tt.punch_out)),4,2)/60 + SUBSTRING(SEC_TO_TIME(TIMESTAMPDIFF(SECOND,tt.punch_in,tt.punch_out)),7,2)/3600) * ter.hourlyrate) as pay
from tbl_times as tt left join tbl_server as ts on ts.serverid = tt.user_id left join tbl_employee_rates as ter on ter.userid=tt.user_id
where ts.locationid = ? and ts.active = 1 and ter.stauts = 1 and date(punch_in) >= ? and date(punch_out) <= ?
如果这不是一个简单的方法,我应该用PHP做任何建议吗?
答案 0 :(得分:0)
每种编程语言或系统都旨在以适当的方式进行一定数量的活动,而不是用于其他活动。
SQL是designed to handle a set of certain activities。
如果您的任务是该集合的子集,那么您应该使用SQL完成任务,除非您可以专门找到一种编程语言或旨在以更合适的方式执行此操作的系统
在您的情况下,您依赖于加入,过滤数据等,这些SQL是专门设计用来处理的 - 因此您绝对应该使用SQL
考虑将您的代码包装在函数,包或视图中,以使您的查询可以重用于所有系统。
答案 1 :(得分:0)
为什么不尝试:(假设mysql)
((UNIX_TIMESTAMP(tt.punch_out) - UNIX_TIMESTAMP(tt.punch_in)) / 3600) * ter.hourlyrate AS salary