Перейти к содержимому

Реферальная программа Мегаплана


  • Закрытая тема Тема закрыта

Конвертация данных БД

#1 phpnoob

phpnoob
  • Пользователь
  • 4 сообщений
  • Репутация: 0
0

Отправлено 31 Январь 2011 - 14:17

Нужно конвертировать таблицу в базе Mysql.
Немного модернизировал старую таблицу и теперь не могу перенести данные из старой в новую.
Имеется таблица users с полями:
id | login | password | set1 | set2 | set3 | email | name | name1 | date | text | label
где поле date в формате: 00.00.00 (число, месяц, год)
Нужно конвертировать в таблицу:
id | time | login |password | set1 | set2 | set3 | set4 | email | name | name1 | label
поле time должно быть в секундах
Нужен как я понимаю небольшой скрипт для этого, но сам я написать не могу, так как не умею.
Очень прошу помочь реализовать.

 

 

  • 0

#2 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 31 Январь 2011 - 14:51

phpnoob, попробуем уточнить, в новой таблице:
1) появились новые поля - time, set4
2) пропали поля - text, date

Как я понимаю, поле date никак не связано с полем time, т.к. date это дата, time это время.
Поля set4 и text, как я понимаю, так же не связаны друг с другом.
Я всё правильно понял?

Покажите хотя бы одну строку данных из старой таблицы, и пример как они должны выглядеть в новой.
  • 0

#3 phpnoob

phpnoob
    Topic Starter
  • Пользователь
  • 4 сообщений
  • Репутация: 0

Отправлено 01 Февраль 2011 - 12:08

Старая таблица:
Изображение
Новая таблица:
Изображение
Поля set4 и text не связаны друг с другом.
Поле date заменено полем time (где time должно быть в секундах).
  • 0

#4 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 01 Февраль 2011 - 12:13

phpnoob, сейчас сделаем :) Делов на 10 минут, надеюсь на PHP подойдет.
  • 0

#5 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 01 Февраль 2011 - 12:51

phpnoob, что-то у меня секунды при конвертации с вашими не совпадают. У вас в таблице формат 01.02.11 => dd.mm.YY?
  • 0

#6 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 01 Февраль 2011 - 13:13

phpnoob,
<?php

$db_host = 'localhost'; // хост MySQL
$db_login = 'root'; // юзер MySQL
$db_pass = ''; // пароль MySQL
$db_name = 'converter'; // имя БД

$table_from = 'conv1'; // откуда конвертим
$table_where = 'conv2'; // куда конвертим

$insert_sql = "INSERT INTO {$table_where} VALUES";

$connect = mysql_connect($db_host, $db_login, $db_pass) or die("Не могу подключиться к серверу MySQL");
mysql_select_db($db_name, $connect) or die("Проблема выбора Базы Данных");

$res = mysql_query("SELECT *, UNIX_TIMESTAMP(STR_TO_DATE(date, '%d.%m.%y')) as date FROM `{$table_from}`");
if( mysql_num_rows($res) > 0 )
{
while( $data = mysql_fetch_assoc($res) )
$insert_sql .= "(null,{$data['date']},'{$data['login']}','{$data['password']}','{$data['set1']}','{$data['set2']}','{$data['set3']}','0.00','{$data['email']}','{$data['name']}','{$data['name1']}','{$data['label']}'),";

$replacer = strrpos($insert_sql, ',');
$insert_sql[$replacer] = ';';

if( mysql_query($insert_sql) )
echo "Данные успешно сконвертированы";
else
echo "Ошибка в конвертации данных";
}

?>

Опишу типы, которые я использовал:
Таблица из которой конвертируем
id - INT(11) ; login, password, email, name , name1, date, label - VARCHAR(255) ; set1, set2, set3 - VARCHAR(10) ; text - text

Таблица куда конвертируем
id, time - INT(11) ; login, password, email, name , name1, label - VARCHAR(255) ; set1, set2, set3, set4 - VARCHAR(10) ;

По поводу преобразования даты. Сначала дата из строкового формата dd.mm.YY переводится в формат даты - YYYY-mm-dd. Затем вычисляем количество секунд с 01.01.1970
У меня получается, что 01.02.11 -> 1296507600
Как у вас получилось 1296518400 я не знаю.
  • 0

#7 phpnoob

phpnoob
    Topic Starter
  • Пользователь
  • 4 сообщений
  • Репутация: 0

Отправлено 01 Февраль 2011 - 13:58

Огромное Вам спасибо за скрипт, попробую разобраться.
По поводу времени, число 1296518400 взялось отсюда:
echo mktime(0,0,0,date('m'),date('d'),date('y'));

Выходит я неправильно сегодняшний день перевел в секунды?
  • 0

#8 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 01 Февраль 2011 - 15:13

phpnoob, ваш пример выдает у меня 1296507600
По разному настроены сервера. 1296518400 - 1296507600 = 10800 / 3600 = 3
Разница у нас с вами в 3 часа. Ваш сервер плюсует ещё 3 часа, возможно у вас другой часовой пояс.
  • 0

#9 gaaarfild

gaaarfild
  • Пользователь
  • 596 сообщений
  • Репутация: 0

Отправлено 06 Февраль 2011 - 10:46

time - INT(11), Рекомендую ставить по возможности больше. Поле time растет постоянно.
И к 2038 году даже максимального значения INT станет недостаточно.))
  • 0

#10 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 06 Февраль 2011 - 11:16

gaaarfild, спасибо за пояснения, эио был пример ;) Тема закрыта.
  • 0

robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Оформление форума – IPBSkins.ru