Как переместить данные из одной таблицы в структуру EAV в MySQL (MariaDB) - PullRequest
0 голосов
/ 30 апреля 2019

Я новичок в php / mysql и как проект для себя, чтобы изучать программирование, я пытаюсь создать своего рода механизм сравнения цен в php на Xampp.

В настоящее время я работаю над окончанием импорта. Я хочу импортировать торговые каналы в созданную EAV базу данных (Mariadb).Я пытаюсь переместить данные из временной (tmp) таблицы в 3 другие таблицы.Данные о торговом канале загружаются в 'tmp' и их необходимо переместить в другие таблицы.

У меня есть следующее:

tmp (временный дамп файла csv)

tmp.ean

tmp.isbn

tmp.color

tmp.dimensions

tmp.image

tmp.upc

tmp.price

tmp.stock

tmp.merchant

t1 (таблица основной информации о продукте)

t1.ean (unique)

t1.isbn

t1.upc

t2 (таблица цен и запасов)

t2.ean (FK)

t2.price

t2.stock

t2.merchant

t3 (таблица атрибутов)

t3.ean (FK)

t3.color

t3.dimensions

t3.image

В настоящее время у меня есть код для заполнения t1

Заполните t1 данными из tmp

1) Сначала я копирую столбец ean из tmp.ean в t1.ean вдобавить новые продукты.2) при втором запуске я заполняю столбцы t1.isbn и t1.upc данными из таблицы tmp, где tmp.ean = t1.ean.Эта часть работает, уникальные продукты добавляются в таблицу t1.

То, что я хочу сделать, это также добавлять данные в T2 и T3, в этих таблицах ean не уникален, так как может быть больше атрибутов на ean и болеецены (продавцы) за ean Я думаю сделать следующее:

Обновить цены / акции в t2:

1) Добавить tmp.ean в t2.ean, гдене существует EAN и Merchant.Поэтому добавьте ean, когда ean отсутствует с этим идентификатором ean и продавца. 2) Добавьте tmp.stock tmp.price в t2.stock t2.price, где tmp.ean = t2.ean AND tmp.Merchant - t2.merchant

Обновление атрибутов в t3:

1) Добавьте tmp.ean в t3.ean, где не существует EAN и t3.color (entity).Поэтому добавьте ean, когда ean отсутствует с этим атрибутом (цветом). 2) Добавьте tmp.color (значение) в t3.color, где tmp.ean = t3.ean И tmp.color = t3.color

Am iна правильном пути?Или я делаю вещи слишком сложными и есть более простой / быстрый способ сделать это, и какие команды SQL-запросов лучше всего использовать, UPDATE, INSERT, JOIN?Там может быть миллионы продуктов и много импорта, поэтому скорость станет проблемой.

1 Ответ

0 голосов
/ 18 мая 2019

Динамические столбцы MariaDB являются предшественником JSON, который теперь существует в последних версиях MySQL и MariaDB.

Вы намекнули, что получаете EAV, но ваш пример показывает только color и dimensions. Строка JSON удобна для сбора набора атрибутов variable (f-stop, dress dress, engine_cylinders, calories, ...), но она not удобна для поиска в любом из тех. Такие вещи, как цвет и размер могут быть достаточно общими и искать достаточно 1014 *, чтобы гарантировать наличие собственных столбцов. Это EAV компромисс .

Когда две таблицы имеют одинаковые 1022 * PRIMARY KEY (ean), редко целесообразно хранить их как две таблицы. Вместо этого обычно лучше составить одну таблицу.

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

Следуйте тегу для множества других обсуждений. Вы можете найти другие полезные советы для вашего проекта.

...