Вставить массив в таблицу MySQL

#php #mysql #arrays

#php #mysql #массивы

Вопрос:

Я новичок в php, и я пытаюсь выяснить, как добавить приведенный ниже массив в таблицу MYSQL под названием «sku».

Каждый подмассив является артикулом.

каждое значение в подмассиве является идентификатором параметров. (т.е. синий, зеленый, желтый и т.д.)

Итак, я хочу, чтобы моя таблица выглядела так.

skuid optionid

идентификатор sku является первичным ключом для таблицы и будет автоматически увеличиваться при добавлении значений optionid.

 Array
 (
     [0] => Array
         (
             [2] => 27
             [3] => 17
         )

     [1] => Array
         (
             [2] => 28
             [3] => 17
         )

     [2] => Array
         (
             [2] => 27
             [3] => 18
         )

     [3] => Array
         (
             [2] => 28
             [3] => 18
         )

 )
 

Комментарии:

1. Что у вас есть на данный момент?

2. Вам нужно выполнить цикл по массиву и использовать запрос для хранения значений…

3. где вы получаете свои идентификаторы SKU? вы не можете просто создать его — он должен быть подключен к какому-то определенному артикулу.

4. Еще одно уточнение. Я передаю идентификатор продукта ($cid) через $_GET. Итак, в моей таблице на самом деле есть три столбца: skuid (автоинкрементное целое число первичного ключа), optionsid (значения в массиве), cid (идентификатор продукта, который я передаю с помощью $ _GET). Таким образом, каждый артикул идентифицируется первичным ключом. Все артикулы присваиваются группе продуктов с идентификатором $cid.

Ответ №1:

Итак, ваш массив:

 $skus=array(
    [SKU] => Array(
         'option' => 27,
         'option2' => 17
     )
);
 

После того, как вы создали свою таблицу MySQL, вы можете использовать следующее для сортировки массива и ввода в таблицу:

 $connect = mysql_connect(HOST,USER,PASS) or die(mysql_error());

$delim = ":";

$length = count($skus);

foreach ($skus as $sku => $opt_array) {

    $i = 0;
    $opts = '';

    foreach ($opt_array as $option_id) {
        if ($i == count($opt_array) {
            $opts .= $option_id;
        } else {
            $opts .= $option_id . ",";
        }
        $i  ;
    }

    $query = "INSERT INTO `skus` (sku,opt_id,opt_id2) VALUES ('" . $sku . "','" . $opts . "')";

    mysql_query ($query, $connect) or die (mysql_error());
}
 

Как вы говорите, у вас в таблице только два столбца, ваши идентификаторы параметров должны находиться в одном поле в вашей таблице. Вот почему я объявил $delim как разделитель между идентификаторами опций.

Ваш фактический запрос для первого цикла через массив будет:

 INSERT INTO `skus` (sku,opt_id,opt_id2) VALUES ('SKU','27', '17')
 

и так далее.

Надеюсь, это поможет.

Комментарии:

1. Хранение значений, разделенных запятыми, в базе данных, как правило, является плохой идеей. Попробуйте написать запрос, который выбирает все артикулы, у которых есть опция 27, например.

2. Я полностью осознаю это… Я использовал его в качестве примера. Если бы это был я, у меня были бы отдельные столбцы таблицы. Возможно, мне следовало указать на это, а не соглашаться с этим. Спасибо, что сказали, что я веду себя по-детски.

3. @DBDev: «Ребячество» действительно является дискриминационным термином, таким как Кол. Шрапнель использовал его.