日期和时间拆分,然后添加到另一个表格列中

时间:2019-05-30 15:18:09

标签: php mysql codeigniter datetime phpmyadmin

编辑:

我要感谢@jimmix给我一些想法,让我开始上一篇文章,但是很遗憾,我的文章被搁置了。由于缺乏细节。

但是这是真实的情况,如果我不能很好地解释我的问题,很抱歉。

从CSV文件中,我获得了原始数据,然后使用表名“ tbldumpbio”将我的upload()函数上传到phpmyadmin数据库中,

请参阅下面的表结构:(tbldumpbio)

enter image description here

从我的表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)

enter image description here

问题是:

  • 日期不能重复
  • 如果状态为“ C / In”,则应添加“时间输入”数据
  • 如果状态为“ C / Out”,则应添加超时数据

预期结果应该是这样的:

enter image description here

1 个答案:

答案 0 :(得分:1)

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

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

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

我可能会尝试另一种方法:如果(但您的问题尚不清楚),每个临时字符和日期仅应存在一行,我将在源表上进行分组查询,找到最短进入时间,一个可以找到最大退出日期,并将两者都用作插入查询的来源。