#php #mysql #arrays
#php #mysql #массивы
Вопрос:
Я создаю массив динамически с помощью этого инструмента.
http://174.121.67.116 /~achadire/aware5/product_options.php?cid=6
Вывод массива выглядит следующим образом.
$data = array(
0 => array(
0 => 300,
3 => 186,
),
1 => array(
0 => 341,
3 => 186,
),
2 => array(
0 => 257,
3 => 186,
),
3 => array(
0 => 300,
3 => 360,
),
4 => array(
0 => 300,
3 => 187,
),
5 => array(
0 => 341,
3 => 360,
),
6 => array(
0 => 341,
3 => 187,
),
7 => array(
0 => 257,
3 => 360,
),
8 => array(
0 => 257,
3 => 187,
),
);
0 => Массив — это продукт. [0]=>300, [2]=>186 представляют уникальную конфигурацию продукта для данного ключа массива. (например, синий, большой.) (каждая vale является идентификатором атрибута.)
Итак, я хочу загрузить результаты в таблицу products в MySQL. Вот моя проблема:
Во-первых, как мне сделать ключ моего массива уникальным 7-значным кодом продукта. Другими словами, как мне переиндексировать мой массив уникальным 7-значным кодом, чтобы я никогда не использовал один и тот же ключ для массива дважды. Я предполагаю, что это означает вычисление следующего значения в базе данных mysql, а затем перебор массива с помощью i перед переходом к таблице.
Во-вторых, одна и та же конфигурация должна применяться только к одному продукту. Поэтому, если комбинация ключей массива уже существует, она должна перейти к следующему массиву.
Короче говоря, как мне превратить мой ключ массива в уникальный 7-значный код продукта? Кроме того, когда я загружаю свой массив, как я пропускаю комбинации значений, которые уже существуют в базе данных, поэтому у меня нет двух разных кодов продуктов с одинаковой конфигурацией.
Ответ №1:
-
Прекратите выяснять, как генерировать уникальные идентификаторы массива, извлекая следующий идентификатор в последовательности записей. У вас будут большие проблемы с параллелизмом. Измените свое поле ID на автоинкрементное и предоставьте СУБД обрабатывать это.
-
Создайте
UNIQUE
ограничение для атрибутовcolor
иsize
products
таблицы. Затем, когда вы вставляете, используйтеINSERT ... ON DUPLICATE UPDATE
синтаксис an, поэтому у вас никогда не будет продукта с теми же атрибутами.
Комментарии:
1. Хорошо. Первичный ключ может быть инкрементным, но это все равно не решает мою проблему. Каждый ключ в массиве все равно должен быть уникальным. В противном случае у меня будет два ключа с разными комбинациями значений. например, если моя первая партия sku имеет ключ [1] -> 1,2,3, [2] => 1,2,5 amp; [3] => 2,3,4 как я могу сделать свою вторую партию артикулов [4], [5], [6]. Снова ключ идентифицирует продукт, значения которого определяют размеры продукта. Итак, если я добавлю два ключа, продукт будет иметь 6 значений, даже если это разные продукты.
2. @Busilinks Я вас не понимаю. Где вы используете этот массив? При вставке продуктов, при обновлении, при поиске? Я спрашиваю о функциональности, которую вы пытаетесь достичь с помощью этого массива.
3. Массив представляет собой разные варианты одного и того же продукта. Я выбираю атрибуты продукта (размер, цвет и т.д.) и генерирую артикулы продукта в массиве. Итак, [shoe1] => синий, размер 12 — [shoe2] => синий, размер 13. Каждый раз, когда я создаю массив, я бы хотел, чтобы он использовал уникальный идентификатор, чтобы я мог отделять артикулы. Итак, если я использую key [0] каждый раз, когда я создаю массив, я бы эффективно добавлял атрибуты к продукту, который уже существует. Создание уникального ключа решает проблему. В любом случае, я так думаю…
4. @Busilinks Вы хотите сгенерировать все возможные комбинации атрибутов продукта? Опять же, скажите мне, какую функциональность вы пытаетесь достичь с помощью этого.
5. Шеф, спасибо за вашу помощь. Я понял это. Спасибо, что указали мне правильное направление.
Ответ №2:
В итоге я вставил запись в свою таблицу sku и вернул первичный ключ в массив. Я переопределяю мой массив новыми значениями ключа и загружаю его в мою таблицу skus_options. Вот код. Надеюсь, это поможет кому-то в будущем.
// inserts records into skus table and creates an array of skuids.
for ($i = 0; $i < $count; $i ) {
$sql = "INSERT INTO skus (idcodes, dateadded) VALUES ('$cid', '$dateadded')";
$result = mysql_query($sql, $dbc) or die(mysql_error());
$sid = mysql_insert_id();
array_push($skuids, $sid);
}
// creates an array using skuid as the array key and inserts the array into the skus_options table.
$skus = array_combine($skuids, array_values($skus));
foreach ($skus as $key => $options) {
foreach ($options as $option => $value) {
$query = "INSERT INTO skus_options (skus_options.idskus, skus_options.valueid, skus_options.idcodes, skus_options.dateadded) VALUES ('$key', '$value', '$cid','$dateadded')";
$result = mysql_query($query, $dbc) or die(mysql_error());
}
}