Фрилансеры предложат решение вашей задачи уже через несколько минут!
Публикация заказа не займет много времени.
Алексей М.
44 года, Россия
11 лет в сервисе
Был онлайн 2 месяца назад

Здравствуйте!
В исходных данных имеем: таблица 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 не попадает.

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

Выбранный исполнитель

Андрей Г.
Андрей Г. 
39 лет, Украина
6 лет в сервисе
Был онлайн 4 года назад
6 лет назад

$50

5 дней

Отзыв заказчика
Система требует писать отзыв под каждым проектом, но я не понимаю зачем. Ведь если это уже третье задание которое я доверяю Андрею - значит меня все устраивает.
Отзыв фрилансера
четко ставит задачу, оплата в срок