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

Php 日期和时间拆分,然后添加到另一个表列中,php,mysql,codeigniter,datetime,phpmyadmin,Php,Mysql,Codeigniter,Datetime,Phpmyadmin,编辑: 我想感谢@jimmix给了我一些想法来开始我的上一篇文章,但不幸的是,我的文章被搁置了。由于缺乏细节 但这里是真实的情况,如果我没有很好地解释我的问题,我很抱歉 从我的CSV文件中,我有一个原始数据,然后我将使用中的upload()函数将其上载到我的phpmyadmin数据库中,表名为“tbldumpbio” 见下表结构:(tbldumpbio) 从表tbldumpbio data中,我有一个名为processTimesheet()的函数 代码如下: public function p

编辑:

我想感谢@jimmix给了我一些想法来开始我的上一篇文章,但不幸的是,我的文章被搁置了。由于缺乏细节

但这里是真实的情况,如果我没有很好地解释我的问题,我很抱歉

从我的CSV文件中,我有一个原始数据,然后我将使用中的upload()函数将其上载到我的phpmyadmin数据库中,表名为“tbldumpbio”

见下表结构:(tbldumpbio)

从表tbldumpbio data中,我有一个名为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”,则应添加时间输入数据
  • 如果状态为“C/Out”,则应添加超时数据
预期结果应该是这样的:


我看到的第一个问题是,时间表示为15:xx:yy PM,这是一种不明确的格式,因为人们可以写15:xx:yy AM,而这不是一个有效的时间

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

请记住,只有当您确定输入行的顺序准确时,这种方法才有效,这意味着先按EmpCompId排序,然后按日期排序,再按时间排序;如果没有,这个程序就不能正常工作


我可能会尝试另一种方法:如果每个empcompid和date只显示一行(但您的问题并不清楚),我会对源表进行分组查询,查找最短进入时间,另一个查找最长退出日期,并将它们作为插入查询的源。

+1。以这种方式存储日期时间确实很奇怪,因为它是军事时间。以需要访问的方式存储数据是最有意义的。我认为,如果只使用上午0-12点和下午0-12点,那就可以了,但我很确定任何SQL server都会拒绝在时间/日期时间字段中使用上午15:00:00的内容。。。我不理解你对以访问方式存储数据的赞扬……我不是询问者