преобразование типа данных datetime в тип данных date и time в php / mysql - PullRequest
0 голосов
/ 04 октября 2011

Я новичок.Я начал писать PHP несколько дней назад.Я хочу скопировать тип данных "datetime" в php в поля типа "date" и "time".

Я сохранил имя поля datetime_info для значения datetime.Он существует в таблице try1.date - это имя поля для типа данных "date", а time - это имя для типа данных "time".Эти два существуют в таблице try2.

Вот что я написал.

$result = mysql_query("SELECT * FROM try1");

while ($row = mysql_fetch_array($result))
{

    $result_update = mysql_query("INSERT INTO try2 (date, time) VALUES ('".$row_team['datetime_info']."', '".$row_team['datetime_info']."')");
    if (!$result_update)
    die('Error: ' . mysql_errno() . mysql_error());
}

Значения, хранящиеся в таблице "try1":

id  datetime_info
1   2008-10-02 00:00:00
2   2008-10-09 00:00:00

Ожидаемым ответом должны быть дата и время, сохраненные в соответствующих полях.Однако на выходе получается

id  date        time
2   0000-00-00  00:00:00
3   0000-00-00  00:00:00

Может кто-нибудь объяснить, почему и как?Я перепробовал много сайтов, но не нашел подходящего объяснения этому.Спасибо в ожидании.

С уважением, BasicGem

Ответы [ 4 ]

4 голосов
/ 04 октября 2011

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

Поскольку вы копируете все строки из таблицы try1 в try2 (но разделяете столбец datetime), должно работать следующее:

INSERT INTO
  `try2`
  SELECT
    null, DATE( `datetime_info` ), TIME( `datetime_info` )
  FROM
    `try1`

Что это значит: для каждой записи, найденной в try1, введите следующие значения в try2:

  • null означает использование функции auto_incrementid столбец в try2 (предполагается, что столбец id действительно является автоинкрементным полем первичного ключа)
  • DATE( `datetime_info` ) означает использование части DATE столбца datetime_info try1
  • TIME( `datetime_info` ) означает использование части ВРЕМЕНИ столбца datetime_info try1

Простое выполнение mysql_query( $sql ), где $sql - строка, представляющая запрос, указанный выше.тогда хватит.Нет необходимости сначала просматривать результаты с помощью PHP.

Я собирался написать и PHP-решение, но другие уже сделали это.Я бы предложил этот ответ .

1 голос
/ 04 октября 2011

Потому что вы берете его в формат и помещаете в другой.Просто используйте explode(), и вы получите 2 нужные вам части.

list($date, $time) = explode(' ', $row_team['datetime_info']);
1 голос
/ 04 октября 2011
$result = mysql_query("SELECT * FROM try1");

while ($row = mysql_fetch_array($result))
{
   $split = explode(' ', $row_team['datetime_info']);

   $result_update = mysql_query("INSERT INTO try2 (date, time) VALUES ('". $split[0]."', '".$split[1]."')");
    if (!$result_update)
    die('Error: ' . mysql_errno() . mysql_error());
}
0 голосов
/ 04 октября 2011

Поле типа date хранит информацию о дате, означающую год, месяц и день (в указанном порядке).Поле time, как вы уже догадались, хранит информацию о времени в формате час: минута: секунда.

Если вы посмотрите на то, что вы сделали, то есть вставка datetime в datefield и time field соответственно - MySQL не распознает формат (вы передаете данные в неправильном формате, который ожидается для поля date или time), поэтому он сохраняет их как значение даты по умолчанию.

Вам необходимо проанализировать выходные данные столбца datetime_info в части даты и части времени, а затем передать их в mysql.

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