2

非常に効率の悪い属性スキーマを持つ Web ショップ (zen-cart) があります。1 つのオプションを多くの商品の属性に使用できます。(逆ではなく)。物事を簡単にするためにビューを使用しようとしましたが、新しい属性を作成するのは依然として非常に面倒です。php-code の変更を検討しましたが、難しすぎます。ソリューションは多言語対応でもあり、私には必要ありません。

表は次のとおりです。

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 とオプション名が 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 での列の定義方法に問題があるのか​​どうかはわかりません。

values_names を配列にしたい人のために: それが本来あるべき姿です。しかし、それは量ではうまくいかないので、顧客は実際には存在しない組み合わせを追加することができます. 人々はそれを修正するために何千時間も費やしてきました。無駄に。今私が欲しいのは、バックオフィスに関して実際に機能し、ソートなどを簡単にするソリューションだけです.

通常のバックオフィス活動には Filemaker と MagneticOne を使用し、データベースの変更には MySQL Workbench を使用します。私はphpを読むことができますが、コードが複雑すぎて変更できません(専門家でさえ、必要なカスタマイズのために、新しいバージョンにアップグレードしようとするときに多くの混乱を引き起こします)

4

0 に答える 0