2015-09-08 55 views
0

我试图在我的应用程序中获取一个人的总工作时间。使用php获取指定行的所有项目的总值

我有这些列在我的表:

id, UserId, ProjectId, FromHr, ToHr, WorkedHrs, Status

每列由用户每天加入WorkedHrs将FromHr之间的计数ToHr

现在我想获得的多个结果值总计在每个月底,例如:

SELECT * FROM Hours WHERE UserId = '22' AND ProjectId = '44' COUNT(WorkedHrs) 

我真的不明白,为什么我没有得到任何结果,是有另一种方法来解决这个问题?

回答

2

试试这个:

SELECT SUM(WorkedHrs) FROM Hours WHERE UserId = '22' AND ProjectId = '44' 

SQL查询的解剖结构是这样的:

SELECT [list of all the things that you want returned] 
FROM [table] 
WHERE [conditions] 

如果你想从MySQL返回的任何东西,它必须是在的的SELECT部分查询。

+0

谢谢!这对我来说是个诀窍:) –

1

它应该是为执行以下操作简单:

SELECT SUM(WorkedHrs) AS TotalHoursWorked 
FROM Hours 
WHERE UserId = 22 
AND ProjectId = 44; 

你desribed结构不说,你有任何日期列。如果要总结小时,每月则需要通过修改查询如下添加日期列(如ActionDay)之后,可以过滤结果:

SELECT UserId, ProjectId, SUM(WorkedHrs) AS TotalHoursWorked, DATE_FORMAT(ActionDay, '%Y-%m') AS Month 
FROM Hours 
WHERE UserId = 22 
AND ProjectId = 44 
AND YEAR(ActionDay) = 2015 
AND MONTH(ActionDay) = 7 
GROUP BY DATE_FORMAT(ActionDay, '%Y%m'); 
-1

我会做什么。

创建3个表格(从我可以看到你的文章)users,hoursprojects

users中,为每个用户制作一个total_hours_worked列。

然后,当您插入hours -row时,计算差异并将其添加到users.total_hours_worked。所以它从20到28(作为例子)。

然后,当你需要total_hours_worked只是从users得到它。

服务器响应速度更快,并且不必每次计算。

编辑

这不是你问什么,但也许你真正需要的东西。

+0

如果需要进行深入的计算,那么在优化非常高性能的应用程序时可能会很有用,但除此之外这不是很好的做法。 1)如果他们想要根据日期范围进行检查,则不能使用预先计算的答案,并且2)每次添加新的小时数时,必须重新计算它们。 – samlev

+0

1)然后你可以在'hours'行添加'running_hours'方法列。那么如果你想要从08-sep-12到10-sep-15的时间,你需要花费运行时间并计算差异。 2)是的,但是您为每个用户每天插入一次,然后仅占用之前的最大值并添加当天的小时数。这取决于他需要多长时间来计算用户的工作时间。 –

+0

顺便说一句,谢谢你的评论。有时候,人们只是冷静下来,然后一起前进,所以你不知道他们不喜欢什么。 –

相关问题