0

私が知っている恐ろしいタイトル、私は私の問題を明確にするためのより良い方法を見つけることができませんでした.

私は成功せずにSOを検索しましたが、答えがすでに出ている場合は、自由にリンクしてください。徹底的に読みます。


本の注文システムを構築しています。人々は 1 か月を通して書籍を注文し、月末には大量の注文が 1 件届きます。

注文は、次のフィールドを持つ Order テーブルに記録されます。

order_id, book_id, quantity, language, person_ordering, timestamp, month, year

注文が到着すると、次のフィールドを持つ Received テーブルに入力されます。

book_id, quantity, language

ここで、ある人が本 1 のコピーを (2) 注文し、別の人が (3) 注文したとします。そしてもう一つ(5)。(10) の合計。その後、注文が届き、7部しかありません。

私は見つけ出すスクリプト/関数を書こうとしています:

  • 本のコピーを受け取る人 (先着順なので、最初に注文した人が最初に注文を処理します。
  • ある人が注文を部分的にしか履行できない場合、注文テーブルを更新して (または、新しい保留中の注文テーブルが必要になる可能性がありますか?)、X の金額がまだ履行を待っていることを反映します。その後、翌月、注文日に基づいて、注文が最初に履行されます。

注文が行われたときのタイムスタンプに基づいて Orders テーブルから情報を取得して並べ替え、次に Received テーブルから情報を取得し、2 つの配列を比較して 3 つ目の配列を更新することを考えました。または、私が見逃しているより簡単な解決策があるかもしれません。

さらに情報が必要な場合は、喜んで提供します。私はこの問題を 2 日間続けて解決してきました。どんな助けでも大歓迎です。

ありがとう!

4

3 に答える 3

0

私には、タイムスタンプ、月、年の変数を廃止して、単一の日時スタンプに置き換えることができるように思えます。
また、コレクションの日時スタンプ用に Received テーブルに列を追加します。
最後に、フルフィルメントされた注文を追跡する別のテーブルを作成します。

  1. 「注文」データの日時スタンプの降順に並べ替えて、必要な月に * を選択します。
  2. 別のクエリで、正しい月を使用してプログラムによる比較のために「受信した」データを取得します。
  3. 「受け取った」各 book_id の「受け取った」数量を別々の変数 (おそらくキー/値の配列) に入れます。
  4. 「受け取った」book_id ごとに、サブループ内の各注文から必要な「注文された」数量を比較および計算し、「受け取った」数量の値を更新します。サブループの各反復の終わりに、「注文済み」数量が 0 に等しくない場合は、残りの数量で翌月の別のエントリを追加する必要があります。また、すべてのフルフィルメント注文を新しいテーブルに入力します。

* 既存のレコードを変更することは**ありません**。これは、ほぼ確実に将来変更しないでおく必要があるためです。

泥のように透明?:P

* データベースのヒント - すべてのレコードのすべてのエントリには、**常に**日時スタンプと、可能であれば「誰がそれを行ったか」が含まれている必要があります。

于 2013-05-24T18:40:03.183 に答える
0

Received テーブルが現在の在庫に関するものであり、注文全体が発送できる場合にのみ注文が発送されると仮定すると、できることの提案は次のとおりです。

  • 注文が履行されたかどうかを示すフィールドを注文に追加します。
  • 書籍を注文した人から、日付順で選択します。入荷量で制限できます。
  • 注文の履行を開始し、受領済みの数量に達するまで、そのようにマークします。
  • 受け取った数量の残りが注文を履行するのに十分でない場合は、それを残し、次回のために残りの数量を受け取り済みに残します。

それが理にかなっていることを願っています。

于 2013-05-24T18:28:35.210 に答える
0

Received テーブルにフィールドを追加してみることができます。注文が来たら、その時点で提供できるコピーの数を計算できます。

book_id, quantity,qty_available, language

 1. B1    2   2  EN
 2. B1    3   3  EN
 3. B1    5   2  EN
于 2013-05-24T18:20:14.370 に答える