首页 > 解决方案 > 日期和时间拆分,然后添加到另一个表列

问题描述

编辑:

我要感谢 @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)

在此处输入图像描述

问题是:

预期的结果应该是这样的:

在此处输入图像描述

标签: phpmysqlcodeigniterdatetimephpmyadmin

解决方案


我看到的第一个问题是您有一个时间表示为 15:xx:yy PM,这是一种模棱两可的格式,因为可以写 15:xx:yy AM 并且这不是有效时间。

也就是说,如果您想要的是每次日期更改时都应该写入一行,那么您应该这样做:将前一个日期存储在一个变量中,然后当您移动到源表中的下一条记录时,您比较与前一个日期,如果它们不同,则插入该行,否则您只需继续读取下一位数据。

请记住,这种方法只有在您确定输入行的顺序准确时才有效,这意味着首先按 EmpCompId 排序,然后按日期排序,然后按时间排序;如果不是,则此程序无法正常工作。

我可能会尝试另一种方法:如果(但从您的问题中不清楚)每个 empcompid 和日期应该只存在一行,我会在源表上进行分组查询,找到最短进入时间,另一个要找到最大退出日期,并将它们都用作插入查询的来源。


推荐阅读