0

私は、MySQL/PHP で記述された在庫/請求システムに取り組んでいます (おそらく、ある種のアクセス フロント エンドと Web インターフェイスを使用します)。

問題は、商品の在庫を、「任意の 2 つを 10 ポンドで」などの複数の割引がある商品に対応できるようにしたいことです。私が実現したいのは、請求書に 10 個のアイテムが追加された場合、それらのアイテムのいずれかが「£x の任意の x」要件を満たし、割引を適用する場合にうまくいくということです。さらに複雑なのは、どのアイテムにも「任意の 2 で £10」や「任意の 3 で £12」などの複数の割引が適用される可能性があることです。基本的に、スーパーマーケットが行うことと同様に、エンド ユーザーにとって便利で簡単です。

同じ請求明細行に入力された同じ項目の x が必要な場合は問題なく動作しますが、それよりも柔軟にする必要があります。

どうすればこれを行うことができるかについて誰かアイデアがありますか? 前もって感謝します。HTML / MySQL / PHP / JavaScript などはかなり得意です。

4

3 に答える 3

0

おそらく、割引に関する基本的な情報 (一意の識別子や説明など) を保持するある種の「割引」テーブルを作成する必要があります (これは、この割引をトリガーするために必要な適格性ルール (プロモーション コードなど) にリンクすることもできます)。

このテーブルには、例が機能するための割引バンドルを作成するためのルールも保持する必要があります。たとえば、「割引をトリガーするために必要な製品の数」や「バンドルの値」などです。柔軟性のために、これらのフィールドは NULL 可能にする必要があります。バンドルを使用する必要があります「割引する製品」テーブルで決定された個々の価格を使用できます。

基本的な例として、次のような割引テーブルがあるとします。

+----+-------------+----------------+--------------+------------+----------+
| id | description | units_required | bundle_price | start_date | end_date |
+----+-------------+----------------+--------------+------------+----------+
| .. + ...         | ...            | ...          | ...        | ...      |

... そして、次のような product_to_discount リンク テーブル:

+----+------------+-------------+----------------+------------+
| id | product_id | discount_id | units_required | unit_price |
+----+------------+-------------+----------------+------------+
| .. | ...        | ...         | ...            | ...        |

次に、製品をディスカウントにリンクします。「この範囲から 3 つのアイテムをわずか 10 ポンドで購入する」のようなものがある場合は、対象となる可能性のある製品の全範囲をディスカウントにリンクし、units_requiredを 3に設定する必要があります。次に、それらのアイテムのいずれか 3 つが「バスケット」にある場合は、 を適用しbundle_priceます。

複数の可能性がある場合は、どのバンドルが優先されるかを選別するために、フィルタリングを行う必要があるかもしれません (おそらく、どれが最大の割引を与えるかを計算することによって)。

このような設定のもう 1 つの可能性は、はるかに単純な割引を行うこともできるということです。1 つの製品だけをディスカウントにリンクするunits_requiredだけですbundle_priceNULLさまざまな値でさまざまな値下げを何度も行う可能性product_to_discount.units_requiredがあります。そのため、単一の製品に割引値を設定したり、大量の商品に対してより大きな割引を設定したりできます。

product_to_discount.product_is_discount「X、Y、または Z を購入して Q を無料で入手」のようなことをしたい場合は、フィールドに追加することもできます。

これはかなり漠然とした概要ですが、「正しい」方向に向けるのに役立つことを願っています...

ああ、心に留めておくべきもう1つのことは、システムが会計を行っている場合、予想される製品価格と割引価格の間の不一致を説明するために「割引ライン」を渡す必要があるということです.

于 2012-03-26T11:40:36.177 に答える
0

さまざまな割引を表すオブジェクトを作成します (C# 構文を使用します)

public interface IOrderProcessor
{
   bool CanBeApplied(OrderItem item);
   void Apply(OrderItem item);
}

public class TwoForOneProcessor : IOrderProcessor
{
   public bool CanApply(OrderItem item)
   {
      // check if the product is in 2 for 1 discount
   }

   public void Apply(OrderItem orderItem)
   {
      // apply the discount
   }
}

注文プロセッサは、すべての割引オブジェクトを受け取り、それを順番に商品に適用します。プロセッサのデータをデータベースに保存できます (つまり、どの製品に適用できるかなど)。

于 2012-03-26T11:38:43.410 に答える
0

PHP と MySQL を使用すると、製品の ID、製品の数、価格、オファーの名前を保存する「割引」テーブルを作成できます。このように、単純なクエリを使用して、請求書の最終的な値を計算するときに、各製品のオファーが存在するかどうかをテーブルと照合します。

SELECT * FROM discounts WHERE product_id = x AND quantity >= y

最終的に、製品と価格のテーブルと、オファーの関連テーブルが作成されます。

于 2012-03-26T11:30:43.293 に答える