Дата и время разделены, затем добавлены в другой столбец таблицы - PullRequest
0 голосов
/ 30 мая 2019

EDIT:

Я хочу поблагодарить @jimmix за то, что дали мне идею начать работу с моим последним сообщением, но, к сожалению, мое сообщение было отложено. Из-за отсутствия деталей.

Но вот реальный сценарий, извините, если я не очень хорошо объяснил свой вопрос.

Из моего CSV-файла у меня есть необработанные данные, затем я буду загружать с помощью функции upload () в свою базу данных phpmyadmin с именем таблицы "tbldumpbio",

См. Структуру таблицы ниже: (tbldumpbio)

enter image description here

Из моей таблицы 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)

enter image description here

Проблема:

  • дата не должна дублироваться
  • Временные данные должны быть добавлены, если статус «C / In»
  • Должны быть добавлены данные тайм-аута, если статус «C / Out»

Ожидаемый результат должен быть примерно таким:

enter image description here

1 Ответ

1 голос
/ 30 мая 2019

Первая проблема, которую я вижу, состоит в том, что у вас есть время, выраженное как 15: xx: yy PM, что является неоднозначным форматом, так как можно написать 15: xx: yy AM, и это не будет правильным временем.

Тем не менее, если вы хотите, чтобы при каждом изменении даты записывалась строка, вы должны сделать именно это: сохранить предыдущую дату в переменной, затем при переходе к следующей записи в исходной таблице, Вы сравниваете дату с предыдущей и, если они отличаются, вставляете строку, в противном случае вы просто продолжаете чтение следующего бита данных.

Помните, что этот подход работает, только если вы уверены, что входные строки расположены в точном порядке, что означает сначала упорядоченный по EmpCompId, а затем по дате, а затем по времени; если они не, эта процедура не работает должным образом.

Я бы, вероятно, попробовал другой подход: если (но это не ясно из вашего вопроса) должна присутствовать только одна строка на empcompid и дату, я бы сделал групповой запрос к исходной таблице, найдя минимальное время входа, другой один, чтобы найти максимальную дату выхода, и использовать их оба в качестве источника для запроса вставки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...