非常に効率の悪い属性スキーマを持つ 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)
応急処置として、次のことを行いたいと思います。
追加のフィールドを作成します。
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]
トリガーを作成して、tb_products に新しい行を作成すると、tb_description と tb_options の両方に新しい行が自動的に作成され、それぞれの product_name とオプション名が tb_products から取得されます。これらのフィールドが tb_products で更新されるたびに、tb_description および tb_options でも更新する必要があります。おそらく、option_ID を prod_ID と同じにします
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を読むことができますが、コードが複雑すぎて変更できません(専門家でさえ、必要なカスタマイズのために、新しいバージョンにアップグレードしようとするときに多くの混乱を引き起こします)