У меня есть много атрибутов продукта, как это
- часть 1:
- черный
- загар
- эспрессо
- серый
- флот
- красный
- часть 2:
- черный
- загар
- эспрессо
- серый
- флот
- красный
- часть 3:
- черный
- загар
- эспрессо
- серый
- флот
- красный
- часть 4:
- черный
- загар
- эспрессо
- серый
- флот
- красный
- Единственный:
- Натуральная кожа
- резинка
- creppy
- кожа с половиной резины
- кожа с подошвой
- кристальная подошва
- размер:
- 39
- 40
- 41
- 42
- 43
- 44
- 45
Я пытался создать комбинации с генератором комбинаций, но это не помогает, запрос не выполняет все, может быть из-за истечения времени ожидания или что-то еще.
Структура базы данных:
- attribute_product :
id | name
1 | part_1
2 | part_2
3 | part_3
4 | part_4
5 | sole
6 | size
- sub_attribute_product :
id | id_atribute_product | name
1 | 1 | tan
2 | 1 | black
.. | ... | ...
4 | 5 | leather
5 | 5 | rubber
.. | ... | ...
7 | 6 | 39
.. | ... | ...
выход :
размер: 39, подошва: кожа, часть 1: загар, часть 2: загар, часть 3: черный, часть 4: загар
Дело в том, что я хочу создать автоматический запрос «create into ….» из более чем 5000 ++, возможно ли это?
Предполагая, что ваш стол sub_attribute_product
имеет данные атрибута, как показано ниже.
id | id_atribute_product | name
---------------------------------------------------
1 1 black
2 1 tan
3 1 espresso
4 1 grey
5 1 navy
6 1 red
7 2 black
8 2 tan
9 2 espresso
10 2 grey
11 2 navy
12 2 red
13 3 black
14 3 tan
15 3 espresso
16 3 grey
17 3 navy
18 3 red
19 4 black
20 4 tan
21 4 espresso
22 4 grey
23 4 navy
24 4 red
25 5 Leather
26 5 rubber
27 5 creppy
28 5 leather with half rubber
29 5 leather with lug sole
30 5 cristy sole
31 6 39
32 6 40
33 6 41
34 6 42
35 6 43
36 6 44
37 6 45
Вы можете извлекать строки каждого атрибута одну за другой в под-таблицах и объединять все, как показано ниже
SELECT concat('size: ',t6.name,', sole: ',t5.name,', part1: ',t1.name,', part2: ',t2.name,', part3: ',t3.name,', part4: ',t4.name) AS RESULT
FROM
(SELECT *
FROM table2 t2
WHERE t2.id_attrib = 1) t1
CROSS JOIN
(SELECT *
FROM table2 t2
WHERE t2.id_attrib = 2) t2
CROSS JOIN
(SELECT *
FROM table2 t2
WHERE t2.id_attrib = 3) t3
CROSS JOIN
(SELECT *
FROM table2 t2
WHERE t2.id_attrib = 4) t4
CROSS JOIN
(SELECT *
FROM table2 t2
WHERE t2.id_attrib = 5) t5
CROSS JOIN
(SELECT *
FROM table2 t2
WHERE t2.id_attrib = 6) t6;
Приведенный выше запрос сгенерирует 6*6*6*6*6*7 = 54432
комбинации, как показано ниже. запрос действителен для mySQL
, Если вы используете другой rdbms
Вы должны вероятно настроить это, например. добавлять AS
ключевое слово или использование ||
или же +
вместо concat
и т.п.
Result
----------------------------------------------------------------------------------
size: 39, sole: Leather , part1: black, part2: black, part3: black, part4: black
size: 39, sole: Leather , part1: tan, part2: black, part3: black, part4: black
size: 39, sole: Leather , part1: espresso, part2: black, part3: black, part4: black
size: 39, sole: Leather , part1: grey, part2: black, part3: black, part4: black
size: 39, sole: Leather , part1: navy, part2: black, part3: black, part4: black
size: 39, sole: Leather , part1: red, part2: black, part3: black, part4: black
size: 39, sole: Leather , part1: black, part2: tan, part3: black, part4: black
size: 39, sole: Leather , part1: tan, part2: tan, part3: black, part4: black
size: 39, sole: Leather , part1: espresso, part2: tan, part3: black, part4: black
size: 39, sole: Leather , part1: grey, part2: tan, part3: black, part4: black
size: 39, sole: Leather , part1: navy, part2: tan, part3: black, part4: black
.....................
.....................and so on
Вы можете проверить демо Вот
Надеюсь, это поможет.
Других решений пока нет …