简体   繁体   English

来自不同表中多个记录的1个字段的PHP MySQL SUM

[英]Php mysql SUM of 1 field from multiple records in different table

I have a script that gets an employees holiday entitlement from their current record in the holiday_entitlement table. 我有一个脚本,该脚本可从holiday_entitlement表中的当前记录中获取员工的假期权利。

This entitlement figure is then used for each holiday request in the database to be subtracted from. 然后将此权利数字用于要从数据库中减去的每个假期请求。

For example: entitlement days = 27 例如:授权天数= 27

holiday request days = 2 >>>> entitlement days left = 25 假期请求天数= 2 >>>>剩余的权利天数= 25

holiday request days = 4 >>>> entitlement days left = 21 假期请求天数= 4 >>>>剩余的权利天数= 21

holiday request days = 1 >>>> entitlement days left = 20 and so on.... 假期请求天数= 1 >>>>剩余应享天数= 20,依此类推。

In my script the entitlement days left is $remainder 在我的脚本中,剩余的权利天数是$ remainder

The bit i am struggling with is to be able to save this $remainder to holiday_entitlement table everytime a request is approved OR work out in SQL the original entitlement figure minus all the requests for that employee, that academic year and if it was approved. 我苦苦挣扎的一点是,每当一个请求被批准时,就可以将这个$ remainder保存到holiday_entitlement表中,或者在SQL中计算出原始的权利数字减去对该雇员,该学年以及是否被批准的所有请求。

   <?php
    $is_business_result = mysql_query('SELECT * FROM holiday_entitlement WHERE employee = \'' . $username . '\' AND academic_year = \'' . $acyear . '\' ');

    if($is_business = mysql_fetch_array($is_business_result)) {
    echo'<div style="float:left; width:400px;">';

    echo'<table width="100%">
    <tr>
    <td><strong>Name:</strong></td>
    <td>'.$is_business['employee'].'</td>
    </tr>
    <tr>
    <td><strong>Entitlement:</strong></td>
    <td>'.$is_business['new_entitlement'].' '.$is_business['units'].'</td>
    </tr>
    <tr>
    <td><strong>Department / Division:</strong></td>
    <td>'.$is_business['division'].'</td>
    </tr>
    <tr>
    <td><strong>Line Manager:</strong></td>
    <td>'.$is_business['line_manager'].'</td>
    </tr>
    </table>';

    echo'</div>';





    echo'<table class="dataTable" id="business_days_table" cellpadding="2" cellspacing="2" width="100%">
    <thead>
    <th>Start Date</th>
    <th>End Date</th>
    <th>Days to be taken</th>
    <th>Days remaining</th>
    </thead>';

    echo '<tr>';

    echo '<td>-</td>';
    echo '<td>-</td>';
    echo '<td>-</td>';
    echo '<td>'.$is_business['new_entitlement'].'</td>';

    echo '</tr>';


    $input = $is_business['new_entitlement'];
    }

    else {echo 'You currently dont have a record for this academic year. ';}


    $requests_result = mysql_query('SELECT * FROM requests WHERE employee = \'' . $username . '\' AND approved = 1 AND academic_year = \'' . $acyear . '\' ORDER BY start_date ASC');

    $remainder = 0;

    while($requests = mysql_fetch_array($requests_result)) {

    $start_date = new DateTime($requests['start_date']);
    $end_date = new DateTime($requests['end_date']);

    $timestamp_start_date = $start_date->getTimestamp();
    $timestamp_end_date = $end_date->getTimestamp();

    $formatted_start_date = date("d M Y", $timestamp_start_date);           
    $formatted_end_date = date("d M Y", $timestamp_end_date);   

    $remainder = ($remainder == 0) ? $input : $remainder;
    $out = $remainder - $requests['days'];
    if($out < 0){
          break;
    }
    $remainder = $out;


    echo'<tr>';
    echo'<td>'.$formatted_start_date.'</td>';
    echo'<td>'.$formatted_end_date.'</td>';
    echo'<td>'.$requests['days'].'</td>';
    echo'<td>'.$remainder.'</td>';
    echo'</tr>';
    }

    echo'</table>';

    ?>

work out in SQL the original entitlement figure minus all the requests for that employee, that academic year and if it was approved 用SQL计算出原始的权利数字减去对该雇员的所有请求,该学年以及是否获得批准

should be this: 应该是这样的:

select new_entitlement-(select sum(days) from requests where employee="sashn" and academic_year=2012 and approved=1) from holiday_entitlement where employee="sashn";

or as update: 或作为更新:

update holiday_entitlement set new_entitlement=27-(select sum(days) from requests where employee="sashn" and academic_year=2012 and approved=1) where employee="sashn" and academic_year=2012;

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

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