Перевод данных из файла Excel в таблицу MySQL

Алексей17 лет в сервисе
Данные заказчика будут вам доступны после подачи заявки
26.04.2013

Здравствуйте!

В исходных данных имеем: таблица Mysql со Странами/Регионами/Городами, таблица Mysql с категориями и файл экселя с организациями.

Задача: написать скрипт для переноса в новую таблицу Mysql данных из Excel файла с учетом данных таблиц Страны/Регионы/Города и категорий.

Мне нужен сам скрипт, так как данные в таблице excel будут меняться. Формат останется.

Поясню. В файле Excel есть поля:

name - название компании.

categories - категории деятельности. Может быть одна или несколько.

city - город

address - улица дом

phone - телефон

url - сайт

hours - часы работы

features - другие данные в формате JSON

При переводе данных надо находить соответствие города из Excel в таблице городов и брать оттуда Id страны, id региона и id города.

Таким образом в новую таблицу заносим:

ID - порядковй номер (с единицы)

country - страна (1 для всех)

region - регион (его id берем из таблицы стран)

city - город (его id бурум из таблицы стран по названию из таблицы Excel)

razdel - раздел (в таблице Excel categories идут через точку с запятой. Берем первое значение и ищем соответствие с таблицей категорий MySQL. Если находим - заносим в новую таблицу ID. Если не находим берем второе значение(если есть) и ищем ему соответствие итд. Если ни одного не найдено пишем: 100)

comment - оставляем пустым

title - название компании (поле name их Excel)

name - оставляем пустым

telephone - phone

adress - address

adressdom - оставляем пустым

adresskor - оставляем пустым

adressstr - оставляем пустым

adressflat - оставляем пустым

url - url

email - оставляем пустым

period - оставляем пустым

aid - для всех устанавливаем 1

date - для первого текущую (формат: 0000-00-00 00:00:00), для второго минус час, для третьего минус 2 часа и тд

status - для всех ok

ip - оставляем пустым.

Создаем поле hours и заносим туда их Excel поле hours - часы работы

Это то, что есть на данный помент в новой базе. Остальное надо добавить (см ниже)

`ID` smallint(9) unsigned NOT NULL AUTO_INCREMENT,

`country` int(4) NOT NULL,

`region` int(4) NOT NULL,

`city` int(4) NOT NULL,

`razdel` int(4) NOT NULL,

`comment` text NOT NULL,

`title` text NOT NULL,

`name` varchar(100) NOT NULL,

`telephone` varchar(50) NOT NULL,

`adress` text NOT NULL,

`adressdom` text NOT NULL,

`adresskor` text NOT NULL,

`adressstr` text NOT NULL,

`adressflat` text NOT NULL,

`url` text NOT NULL,

`email` varchar(50) NOT NULL,

`period` varchar(4) NOT NULL,

`aid` int(9) NOT NULL,

`date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',

`status` varchar(15) NOT NULL,

`ip` varchar(30) NOT NULL,

PRIMARY KEY (`ID`)

Из поля features таблицы Excel вносим остальные данные по схеме (русский текст надо перевести из юникода в кирилицу):

Их этого:

{

type: "enum",

id: "car_brand",

name: "марка",

value: [

"Chevrolet Niva",

"ВАЗ"

],

values: [

"Chevrolet Niva",

"ВАЗ"

]

},

В новой базе mysql создаем поле enum_car_brand (если оно еще не было создано - нужна проверка) и заноси туда данные: Chevrolet Niva, ВАЗ

Из этого:

{

type: "bool",

id: "official_dealer",

name: "официальный дилер",

value: true

},

Создаем поле bool_official_dealer (если оно еще не было создано - нужна проверка) и заносим значение: true

{

type: "bool",

id: "wi_fi",

name: "wi-fi",

value: false

},

Из этого создаем поле bool_wi_fi (если оно еще не было создано - нужна проверка) и заносим значение: false

Дело в том, что не для всех строк в таблице Excel поле features заполнено. А где заполнено могут быть разные переменные.

Но все они сводятся к двум типам: type: "enum" и type: "bool". По id добвляем поле в базу добавляя к названию type (bool или enum). И в значение заносим данные из поля value без кавычек.

Вот еще пример:

{

type: "enum",

id: "auto_insurance_type",

value: [

"КАСКО/ОСАГО"

],

values: [

"КАСКО/ОСАГО"

]

},

Создаем Поле enum_auto_insurance_type заносим значение: КАСКО/ОСАГО

Если не найдено совпадения по городу - заносим эту строку из талицы Excel в отдельный файл - чтобы потом видно было что не прошло по городам.

Если не найдено ни одного совпадения по категориям - заносим эту строку из талицы Excel в отдельный файл, - чтобы было видно каких нет категорий в базе, но в присваиваем ID 100, как написано выше.

И еще в один файл заносим соответствия из поля features по id и name:

id: "wi_fi", name: "wi-fi",

id: "official_dealer", name: "официальный дилер",

Так как поле name в базу mysql не попадает.

Файлы приложил.

Заявки фрилансеров