#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: «Ребячество» действительно является дискриминационным термином, таким как Кол. Шрапнель использовал его.