2016-07-07 79 views
0

我有一个假表是这样的:计算从MySQL DATABSE离开

**employeeId action  type  effective_date** 
    1   leave  paid  2016-01-15 
    2   leave  unpaid  2016-01-16 
    1   return  return  2016-01-17 
    2   return  return  2016-01-17 

我尝试此查询:

$query = (select * from table where employeeId = "$empID" && type = "$type"); 

在此之后我被困;其实我想:

where Empid = 1 && action = leave && type = paid orderby effective_date 

$i=0; 
$j=$i+1; 
$leave =0; 
while($row = mysqli_fetch_array($query)){ 

    $leave = $row['effective_date'][$i] - $row['effective_date'][$j]; 
    $i+1; 
    $j+1; 
    $leaves = $leaves+$leave; 
} 

你能帮我解决这个问题吗?或者有更好的计算假期的方法吗?

+0

试图通过在phpMyAdmin运行所需的查询开始,或任何SQL编辑器,你正在使用。并在您的查询中进行计算,而不是使用PHP。 –

+0

我知道这不是一个答案,但在成本方面,为什么不使用现有的时间管理系统? http://www.kimai.org/ –

回答

0

你必须ORDERBY之间给予空间:

SELECT * FROM `employee` 
    WHERE `employeeId`='1' 
    AND `action` = 'leave' 
    AND `type` = 'paid' 
ORDER BY `effective_date` ASC 

输出

+------------+--------+------+---------------------------+ 
| employeeId | action | type |   effective_date | 
+------------+--------+------+---------------------------+ 
|   1 | leave | paid | January, 15 2016 00:00:00 | 
+------------+--------+------+---------------------------+ 

小提琴:http://sqlfiddle.com/#!9/5bac3/3

这会给你叶数:

SELECT `employeeId`, COUNT(*) AS `NumLeaves` FROM `employee` 
    WHERE `employeeId`='1' 
    AND `action` = 'leave' 
    AND `type` = 'paid' 
GROUP BY `employeeId` 
ORDER BY `effective_date` ASC 

输出

+------------+-----------+ 
| employeeId | NumLeaves | 
+------------+-----------+ 
|   1 |   1 | 
+------------+-----------+ 

小提琴:http://sqlfiddle.com/#!9/5bac3/6

+0

叶子数量应该返回effective_date - leave effictive_date - re date =总假期天数 – Raj