Php, MySql - вставка данных в две таблицы в виде пары ключ-значение - PullRequest
0 голосов
/ 18 мая 2018

Я прошу некоторую помощь относительно вставки данных в базу данных MySQL из формы PHP.

У меня есть две таблицы 'items' и 'attribute'.Поля:

items:
SKU, name, price, type

attributes:
SKU, id, SKU, key, value

"SKU" - это идентификатор для каждого элемента.И «id» - это идентификатор для каждого атрибута в «атрибутах».Таблицы связаны через столбец SKU в качестве первичного / вторичного ключа.

Я знаю, что можно вставить данные в несколько таблиц, например:

$sql = "INSERT INTO items (column1, column2, column3) VALUES ('value1', 'value2', 'value3');
        INSERT INTO attributes (column1, column2, column3) VALUES ('value1', 'value2', 'value3')";

Но проблема в том, что моя вторая таблица 'данные содержимого атрибутов в виде пар ключ-значение.Такие ключи, как «размер», «рост», «вес» и т. Д., А также значения как целые числа для каждого измерения.И я не могу просто набрать INSERT INTO attributes (SKU, key, value) VALUES ('$SKU', '$size', '$height' ... etc)

Как можно вставить данные в таблицу в виде пар ключ-значение?Мне нужно вставить данные для размера, роста, ширины, длины, веса.У каждого из них есть свое поле ввода в форме.Я хочу извлечь данные из этой формы и вставить в таблицы - элементы и атрибуты.

До сих пор я успешно вставлял данные в «элементы» следующим образом:

$sql = "INSERT INTO items (SKU, name, price) VALUES ('$SKU', '$name', '$price')";

Но я не могу найти таблицу «атрибутов».Этот код не работает.Я попытался вставить «размер» только для того, чтобы проверить, работает ли этот способ:

$sql = "INSERT INTO attributes (SKU, key, value) VALUES ('$SKU', 'size', '$size') ON items.SKU = attributes.SKU";

И помощь будет оценена.Заранее спасибо!

1 Ответ

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

Есть 2 проблемы с

$sql = "INSERT INTO attributes (SKU, key, value) VALUES ('$SKU', 'size', '$size') ON items.SKU = attributes.SKU";

1) ON items.SKU = attributes.SKU Этот синтаксис неправильный и в этом нет необходимости.

2) Вы используете зарезервированное ключевое слово "ключ"для имени столбца.Чтобы сделать это, вам нужно заключить его в backticks (`)

Этот sql должен работать:

$sql = "INSERT INTO attributes (SKU, `key`, value) VALUES ('$SKU', 'size', '$size')";

Если вы хотите вставить несколько атрибутов, вы можете сделать это следующим образом:

$sql = "INSERT INTO attributes (SKU, `key`, value) VALUES
    ('$SKU', 'size', '$size'),
    ('$SKU', 'height', '$height'),
    ('$SKU', 'weight', '$weight')";
...