简体   繁体   English

人月或年休假天数总和

[英]Sum days of person vacation in month or year

I have table of vacation:我有假期表:

`holiday` (`ID_holiday`, `holiday_start`, `holiday_end`, `holiday_typ`, `ID_empl`)
(18, '2019-07-07', '2019-07-18', 1, 6),
(19, '2019-06-25', '2019-06-25', 3, 5),
(20, '2019-05-30', '2019-06-05', 1, 6),
(21, '2019-05-30', '2019-05-30', 1, 5),
(22, '2019-06-30', '2019-06-30', 1, 5),
(23, '2019-06-30', '2019-06-30', 1, 6),

I need the number of days of vacation per month and year (sum).我需要每月和每年的假期天数(总和)。
Vacation is entered during weekends and public holidays - I only need the sum of working days.在周末和公共假期输入假期 - 我只需要工作日的总和。

holiday_typ 1.. 1 day假日类型 1.. 1 天
holiday_typ 3.. 0.5 day假日类型 3.. 0.5 天

Is it possible to solve it by mysql query or mysql+php?是否可以通过 mysql 查询或 mysql+php 来解决? Thanks谢谢

I try.. for one employer:我尝试..为一位雇主:

for ($Day = 1; $Day <= $last_day_month; $Day++) {
      $date = $YYYY.'-'.$Month.'-'.$Day;
      $cz_svatek = cz_svatek ($Month, $Day, $YYYY);  // return name of public holiday or ''

      $sql = "SELECT *
              FROM holiday
              JOIN holiday_typ  USING (ID_holiday_typ)
              WHERE ID = ".$ID."
                AND holiday_start <= '".$date."'
                AND holiday_end >= '".$date."'";
      $result = MySQL_Query($sql);

      while ($dbMuf = MySQL_Fetch_Array($result)){
        if( date("N", mktime(12, 0, 0, $Month, $Day, $YYYY)) < 6 && $cz_svatek == '') $holiday[$dbMuf["ID_dov_typ"]]++;
      }
$sum_holiday = $holiday[1]+0.5*$holiday[3];

I did it this way (for now):我是这样做的(现在):

('Hol_len' from table holiday_typ... 0.5 || 1.0 || 0.0 ) (ID = ID_Empl) ('Hol_len' 来自表 holiday_typ... 0.5 || 1.0 || 0.0 ) (ID = ID_Empl)

$frs_day_y = mktime( 0, 0, 0, 1, 1, $YYYY );
$lst_day_y = mktime( 23, 59, 59, 12, 31, $YYYY );

for ($Day_mk = $frs_day_y; $Day_mk <= $lst_day_y; $Day_mk += 86400 ) {
    $Day   = date('d', $Day_mk);
    $Month = date('n', $Day_mk);
    $date  = date('Y-m-d', $Day_mk);

$sql = "SELECT *
              FROM dovolena
              JOIN holiday_typ  USING (ID_holiday_typ)
              WHERE Hol_len > 0
                AND holiday_start <= '".$date."'
                AND holiday_end >= '".$date."'";
    $result = MySQL_Query($sql);

    while ($dbMuf = MySQL_Fetch_Array($result)){
      if( date("N", $Day_mk) < 6 && cz_svatek ($Month, $Day, $YYYY) == '') {

        if( isset($Hol_sum[$Month][$dbMuf["ID"]]) ) $Hol_sum[$Month][$dbMuf["ID"]] += $dbMuf["Dov_len"];       //$dbMuf["ID_dov_typ"]
        else $Hol_sum[$Month][$dbMuf["ID"]] = $dbMuf["Hol_len"]+0;

        if( isset($Hol_sum_y[$dbMuf["ID"]]) ) $Hol_sum_y[$dbMuf["ID"]] += $dbMuf["Hol_len"];       //$dbMuf["ID_dov_typ"]
        else $Hol_sum_y[$dbMuf["ID"]] = $dbMuf["Hol_len"];

        $id[$dbMuf["ID"]] = 1;
      }
    }
  }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM