php - 日期和时间拆分,然后添加到另一个表列
问题描述
编辑:
我要感谢 @jimmix 给了我一些开始我上一篇文章的想法,但不幸的是,我的文章被搁置了。由于缺乏细节。
但这是真实的情况,如果我没有很好地解释我的问题,我很抱歉。
从我的 CSV 文件中,我有一个原始数据,然后我将使用我的 upload() 函数将表名“tbldumpbio”上传到我的 phpmyadmin 数据库中,
见下表结构:(tbldumpbio)
从我的表 tbldumpbio 数据中,我有一个名为 processTimesheet() 的函数
这是代码:
public function processTimesheet(){
$this->load->model('dbquery');
$query = $this->db->query("SELECT * FROM tbldumpbio");
foreach ($query->result() as $row){
$dateTimeExplArr = explode(' ', $row->datetimex);
$dateStr = $dateTimeExplArr[0];
$timeStr = $dateTimeExplArr[1];
if($row->status='C/Out' and !isset($timeStr) || empty($timeStr) ){
$timeStrOut ='';
} else {
$timeStrOut = $dateTimeExplArr[1];
}
if($row->status='C/In' and !isset($timeStr) || empty($timeStr) ){
$timeStrIn ='';
} else {
$timeStrIn = $dateTimeExplArr[1];
}
$data = array(
'ID' => '',
'companyAccessID' => '',
'name' => $row->name,
'empCompID' => $row->empid,
'date' => $dateStr,
'timeIn' => $timeStrIn,
'timeOut' => $timeStrOut,
'status' => '',
'inputType' => ''
);
$this->dbquery->modInsertval('tblempbioupload',$data);
}
}
此函数会将另一个数据添加到另一个名为“tblempbioupload”的表中。但这是我得到的结果:
请看以下数据:(tblempbioupload)
问题是:
- 日期不应重复
- 如果状态为“C/In”,则应添加 Time In 数据
- 如果状态为“C/Out”,则应添加超时数据
预期的结果应该是这样的:
解决方案
我看到的第一个问题是您有一个时间表示为 15:xx:yy PM,这是一种模棱两可的格式,因为可以写 15:xx:yy AM 并且这不是有效时间。
也就是说,如果您想要的是每次日期更改时都应该写入一行,那么您应该这样做:将前一个日期存储在一个变量中,然后当您移动到源表中的下一条记录时,您比较与前一个日期,如果它们不同,则插入该行,否则您只需继续读取下一位数据。
请记住,这种方法只有在您确定输入行的顺序准确时才有效,这意味着首先按 EmpCompId 排序,然后按日期排序,然后按时间排序;如果不是,则此程序无法正常工作。
我可能会尝试另一种方法:如果(但从您的问题中不清楚)每个 empcompid 和日期应该只存在一行,我会在源表上进行分组查询,找到最短进入时间,另一个要找到最大退出日期,并将它们都用作插入查询的来源。
推荐阅读
- java - JUnit 测试不断收到空点异常
- c++ - 如何实现容纳整数和空指针的双向链表?
- azure - 在 Azure AD B2C 作为 IdP 和 Salesforce 作为 SP 之间设置 SAML 联合
- r - R - 循环 API 调用
- debugging - Break All 和 Stop Debugging 在 Visual Studio 中的位置错误
- python - 有没有办法在 Python-Plotly 图表中添加边线?
- odoo-11 - ./odoo-bin --config=' /etc/odoo.conf' ODOO 11
- javascript - 如何在 numericjs 中格式化至少有一位小数的数字
- swift - 我们可以查询 Firebase 快照吗?
- c# - 从四个 16 位值构建 64 位 int 的最快方法?