php - 自动将新条目添加到表 codeigniter
问题描述
我正在制定一个程序,根据每位员工的出勤率计算他们的膳食津贴。这是我现在拥有的数据,一个名为出席的表。该表是从我导入的 csv 文件中填充的,这是我导入 csv 的代码
function uploadData()
{
$fp = fopen($_FILES['userfile']['tmp_name'],'r') or die("can't open file");
// Ignore header line
$header = fgetcsv($fp);
// Array to store the partial records
$attendance= [];
while($csv_line = fgetcsv($fp))
{
// Key to identify first part of record (Name and date)
$key = $csv_line[1]."/".$csv_line[3];
if ( isset($attendance[$key]) ){
$start = $attendance[$key];
// Extract data from first part of record and add in end date from current row
$data = array(
'id_attend' => $start[0] ,
'emp_code' => $start[1],
'emp_name' => $start[2],
'date' => $start[3],
'time_in' => $start[4],
'time_out' => $csv_line[4],
);
$data['crane_features']=$this->db->insert('attendance', $data);
// Remove partial record
unset($attendance[$key]);
}
else {
// Store partial record
$attendance[$key] = $csv_line;
}
}
fclose($fp) or die("can't close file");
$data['success']="success";
}
这是我的桌子
| id_attend | emp_code | emp_name | date | time_in | time_out |
----------------------------------------------------------------------------------
| 0001 | brw | brown |01.01.2001| 07.00 | 20.00 |
| 0002 | cny | cony |01.01.2001| 07.00 | 20.00 |
----------------------------------------------------------------------------------
我需要计算他们参加了多少天并将其保存到我的数据库中。我已经有一张桌子作为容器,称为津贴
------------------------------------------------------------------------
|id_allowance(auto increment)|emp_code|emp_name|days_attended|allowance|
------------------------------------------------------------------------
| 0001 | brw | brown | 1 | 30.00 |
| 0002 | cny | cony | 1 | 30.00 |
------------------------------------------------------------------------
每次我导入新的 csv 文件时,有没有办法自动生成和更新津贴?因为津贴表本来应该是空的,实际上取决于出勤表
解决方案
为此,您需要在 MySQL 中创建一个触发器,这样当新数据将插入到出勤表中时,相同的查询将自动生成并为津贴表运行。
DROP TRIGGER IF EXISTS allowance_insert_trigger;
DELIMITER $$
CREATE TRIGGER allowance_insert_trigger
AFTER INSERT ON attendance FOR EACH ROW
begin
DECLARE days_attandence varchar(10);
SELECT count(*) INTO days_attandence FROM attendance WHERE emp_code=NEW.emp_code GROUP BY date;
INSERT INTO `allowance` ( `emp_code`, `emp_name`, `days_attended`, `allowance`) VALUES ( NEW.emp_code, NEW.emp_name, days_attandence, '30.00');
END;
$$
DELIMITER ;
你想写这样的触发器,我在这里放了静态值作为津贴,但你可以把你自己的计算值放在那里。
推荐阅读
- php - 如何在codeigniter中根据第一个循环的ID添加另一个循环
- jms - 将 Spring 集成部署到 WebSphere ND 8.5.5
- java - 有没有一种很好的方法来检测 JTable 列之间的边界上的(双击)鼠标单击?
- python - 来自txt文件的输入和使用函数的简单绘图
- python - 如果与功能 API 一起使用,TensorFlow lambda 将增加一维
- electron - nodeIntegration:false 时的自定义电子标题栏问题
- html - Formik 没有显示在 nextjs 页面上?
- amazon-web-services - AWS 开发工具包 - 支持自定义信任库
- postgresql - 在 macOS 上安装 pg_partman
- node.js - nodejs + socket.io 通过 apache 代理