2014-02-15 62 views
0

我有一个数据库,收集用户输入/输出的时间。我收集像这样的信息:根据14天的薪酬期计算薪酬期 - PHP/SQL

user_id  clock_in clock_out 
612   1383710400 1383728400 
612   1384315200 1384333200 
508   1383710400 1383738400 

虽然循环,我计算每个物体的时间,像这样:
$total=(($e->clock_out-$e->clock_in)/60/60);

我在哪里卡住 我卡上怎么一点将他们分成薪酬期。我知道一年有26个工资期。我也知道我们今年的首付工资是01.13.14 - 01.26.14

我曾尝试: 我想尝试只收集一年date('W',$e->clock_in)的一周,同时通过数据库结果循环,但我不知道如何将它们分组。

问题:foreach期间循环时可以进行分组/排序吗?您是否建议将数据分组/整理到薪酬期间的方法不同?

请让我知道是否需要更多的代码等。谢谢!

回答

1

假设这些是标准的Unix时间戳,你可以按照你想要的方式简单地提取/压缩日期。如果您的工作周对应于标准日历周,那就更简单了:

SELECT user_id, clock_in-clock_out 
FROM yourtable 
GROUP BY WEEK(FROM_UNIXTIME(clock_in)) 

这将只通过单一的周组,但是这仅仅是给你一个总体思路。

MySQL有一个非常广泛的,可用于该日期/时间功能:http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_week

+0

莫大的联系,我发现,整个页面的帮助。所以你怀疑提取过程中的分组比提出要好? – camelCase

+0

这取决于您的分组规则以及您的工作周如何映射到日历周。如果sql变得太难看了,你最好用PHP来做。另外还有一些边际案例,如跨越一年边界的支付周期。你可以从52周开始,在第1周结束,为期51周的工作。 –

+0

啊,是的,我明白你的观点,谢谢你。我现在正在测试它,看看它是多么可行,因为我们的工作周确实将日历周映射到了日历周(mon-sun,这与“date”('W')'相关)。 – camelCase