Обработка нулевого поля на PHP

У меня есть стол с именем hr events где в одной области выводятся данные о том, что определенный работник ушел в декретный отпуск;

На return_date В поле отображается дата возвращения работника из декретного отпуска.

Если сотрудник еще не вернулся, мы устанавливаем значение по умолчанию, как показано на CREATE утверждение ниже: CREATE (return_date DATE NOT NULL DEFAULT '0000-00-00',);

В этом отчете есть одно последнее поле, в котором должна указываться дата последнего возвращения работника: (c.return_date ,'%d/%m/%Y') AS c_return_date, Как начинающий SQL, я борюсь с этим: всякий раз, когда у нас есть (default 0000-00-00) значение, c.return_date приносит какую-то радостную дату, например: 01.12.1999, но это пустое поле.

Я пытался лечить это с ISNULL(c.return_date, '') или же ISNULL(c.return_date, 0) но это просто не работает. В приведенном выше сценарии это последнее поле должно быть пустым или что-то кроме этого "12/01/2009".

Что касается PHP, и именно поэтому я редактирую эту тему, я думаю, что может быть выход из этого путем решения этой проблемы внутри скрипта php:

<?php
    $retorno = (!empty($row['c_return_date'])) ? $row['c_return_date'] : $row['a_return_date'];
    $data = explode('-', $retorno);
    echo date("d/m/Y", mktime(0, 0, 0, $data[1], $data[2] + 1, $data[0]));
?>

В настоящее время я пытаюсь выяснить (на самом деле, больше выяснить, как работает этот сценарий), как проверить этот сценарий, в случае такой даты возврата, как 0000-00-00 (что означает, что работник еще не вернулся к своей деятельности), не отображать такого рода результаты, такие как 01.12.1999.

3 ответа

Решение

В конце концов, это была проблема с PHP-скриптом.

<?php
                         $retorno = (!empty($row['c_return_date'])) ? $row['c_return_date'] : $row['a_return_date'];
                         $data = explode('-', $retorn);
                         echo date("d/m/Y", mktime(0, 0, 0, $date[1], $date[2] + 1, $date[0]));
                         ?>

Мне просто нужно было поставить условное заявление на сценарий выше, чтобы предотвратить c_return_dateот отображения чего-либо в случае a_return_date это 0000-00-00 Взгляните на предложения if / else:

<?php
                          if ($row['a_return_date'] != "0000-00-00"){
                            $return = (!empty($row['c_return_date'])) ? $row['c_return_date'] : $row['a_return_date'];
                            $data = explode('-', $return);
                             echo date("d/m/Y", mktime(0, 0, 0, $date[1], $date[2] + 1, $date[0]));
                             } else $row['a_return_date_br'] = "-";
                             ?>

Спасибо вам всем. Надеюсь, это поможет кому-то еще.

Я рекомендую разрешить обнулять ваше поле даты:

CREATE TABLE yourTable (return_date DATE, ...)

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

SELECT COALESCE(return_date, '1999-12-01') AS return_date
FROM yourTable;

Я не думаю, что это случайное свидание. Это просто дата, представленная 0000-00-00 в MySQL.

Я бы использовал NULL:

create table hr_events (return_date date default null);

Таким образом, вы можете запросить список этого:

select * from hr_events where return_date is null;

Чтобы получить все hr_events строки где return_date не был установлен.

Другие вопросы по тегам