编辑:
我要感谢@jimmix给我一些想法,让我开始上一篇文章,但是很遗憾,我的文章被搁置了。由于缺乏细节。
但是这是真实的情况,如果我不能很好地解释我的问题,很抱歉。
从CSV文件中,我获得了原始数据,然后使用表名“ tbldumpbio”将我的upload()函数上传到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)
问题是:
预期结果应该是这样的:
答案 0 :(得分:1)
我看到的第一个问题是您有一个表示为15:xx:yy PM的时间,这是一种含糊的格式,因为可以写15:xx:yy AM,但这不是一个有效时间。
也就是说,如果您想要的是每次日期更改都应写入一行,则应该这样做:将上一个日期存储在变量中,然后在移至源表中的下一个记录时,您将日期与上一个日期进行比较,如果日期不同,则插入该行,否则只需继续读取下一个数据即可。
请记住,只有当您确定输入行的顺序正确时,此方法才有效,这意味着首先按EmpCompId排序,然后按日期排序,再按时间排序;如果不是,那么此过程将无法正常工作。
我可能会尝试另一种方法:如果(但您的问题尚不清楚),每个临时字符和日期仅应存在一行,我将在源表上进行分组查询,找到最短进入时间,一个可以找到最大退出日期,并将两者都用作插入查询的来源。