2

我有一个网店(zen-cart),它的属性模式非常低效。一个选项可用于许多产品的属性。(而不是相反)。我尝试使用视图让事情变得更简单,但是创建新属性仍然非常繁琐。我们已经研究过更改 php 代码,但这太难了。该解决方案也是多语言的,我不需要。

表格如下:

tb_products:
prod_ID

tb_description:
prod_ID
lang_ID
product_name (T-shirt)

tb_attributes:
attr_ID
prod_ID
option_ID
values_ID

tb_options:
option_ID
language_ID
option_name (Size & Color)

tb_values:
value_ID
option_ID
language_ID
value_name (XS Red)

作为快速修复,我想做以下事情:

  1. 制作附加字段:

    tb_products:
    product_name
    option_name [optional - only if attributes are to be created]
    value_concatinator [optional]
    
    tb_attributes:
    value_name_1
    value_concatinator_1 [optional]
    value_name_2 [optional]
    value_concatinator_2 [optional]
    value_name_3 [optional]
    
  2. 创建一个触发器,这样当我在 tb_products 中创建一个新行时,这将自动在 tb_description 和 tb_options 中创建一个新行,其中 product_name 和 option name 分别取自 tb_products。每次在 tb_products 中更新这些字段时,它们也必须在 tb_description 和 tb_options 中更新。大概让option_ID和prod_ID一样

  3. 在 tb_attributes 中创建新行时,自动:

    • 从父产品行插入 option_ID。
    • 在 tb_values 中创建一个新行。value_name 是属性中值名称和 value_concatinators 的连接

    CONCAT(value_name_1, ' ' , value_concatinator_1, ' ', value_name_2, ' ', value_concatinator_2, ' ', value_name_3) FROM tb_attributes

每次在 tb_attributes 中更新这些字段,都必须在 tb_values 中自动更新

所以我的主要目的是主动只更新表tb_products和tb_attributes,而让MySQL在上面提到的新字段中每次创建或更新产品或属性时更新其他表。

我不确定触发器是否是答案,或者是否可以使列本身自动更新(并且最后一个解决方案是否会对如何在 php-code.xml 中定义列产生一些问题。

对于那些想要将 values_names 变成数组的人:这就是它应该的样子。但它不适用于数量,因此客户可以实际添加不存在的组合。人们已经花费了 1000 多个小时试图修复它。无济于事。现在我想要的只是一个真正适用于后台的解决方案,并且让我可以轻松地进行排序等。

我们使用 Filemaker 和 MagneticOne 进行正常的后台活动,使用 MySQL Workbench 来更改数据库。我可以阅读 php,但代码太复杂,我无法更改(由于必要的自定义,即使是专业人员在尝试升级到新版本时也会造成很多麻烦)

4

0 回答 0