与Prestashop中的许多产品属性生成组合



我有许多像这样的产品属性

  1. 第1部分:
    • 黑色
    • tan
    • 浓缩咖啡
    • 灰色
    • 海军
    • 红色
  2. 第2部分:
    • 黑色
    • tan
    • 浓缩咖啡
    • 灰色
    • 海军
    • 红色
  3. 第3部分:
    • 黑色
    • tan
    • 浓缩咖啡
    • 灰色
    • 海军
    • 红色
  4. 第4部分:
    • 黑色
    • tan
    • 浓缩咖啡
    • 灰色
    • 海军
    • 红色
  5. 唯一:
    • 皮革
    • 橡胶
    • creppy
    • 一半橡胶的皮革
    • 带有鞋底的皮革
    • cristy Sole
  6. 大小:
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45

我尝试与组合生成器创建组合,但这无济于事,查询并不能运行所有内容,可能是由于超时或任何内容所致。

struche数据库:

- 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,唯一:皮革,part1:tan,part2:tan,part3:黑色,part4:tan

重点我要创建一个自动查询"创建为...."超过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

您可以在此处检查演示

希望这会有所帮助。

最新更新