0

MySQLとPHPを使用しています。ID と数量の列を含むテーブルがあります。合計で 40 に達したため、最後に合計した行の ID を取得したいと思います。もう少し詳しく言うと。データベースに 3 行あります。1 つは数量 10、もう 1 つは数量 30、もう 1 つは数量 20 です。したがって、数量を合計して結果が 40 になる場合、最初の 2 つの魔女の平均を合計すると、10 + 30 = 40 になります。 40 を合計するために使用されるのは 2 です。40 の合計を完了するために使用される最後の行の ID を知りたいだけです。

質問があれば、さらに詳細を説明します。ありがとうございました!!


このように言えば、私は実際に6つの製品を手にしています。最初の 1 つは 10 日に、次の 3 つは 11 の日に、最後の 2 は 12 に私の所有物になりました。

今、私は在庫から 3 つの製品を販売したいと考えています。そして、来た順に売りたい。したがって、3 つの製品を希望するお客様には、10 の製品と 11 の製品から 2 つの製品を販売します。

次の顧客が 2 つの製品を希望する場合、11 の日付から 3 つの製品の最後の注文から残っている製品を 1 つと、12 の製品から別の製品を 1 つ販売します。

問題は、販売した各製品の価格をどのように知ることができるかということです。要求された数量ごとにどの行が合計されるかがわかれば、注文を配送するたびに合計をどこから開始すればよいかがわかると思いました。最初に、3 つの製品を合計する行を調べて、エントリ ID を保持します。次の注文では、その ID からカウントを開始し、2 つの製品の 2 番目の注文が合計されるまで合計します。このようにして、各製品の入荷価格を追跡できると考えました。ですので、12日以降の商品は初回価格での販売は致しません。

お分かりできると良いのですが。製品の価格を知る必要があるだけなので、最初の製品の価格は 1 つであることはわかっていますが、製品の価格が上がるにつれて、価格も引き上げる必要があります。より高い価格。私はこれを追跡する場合にのみそれを達成することができます...

どうもありがとうございました。


誰でもない ?quantityまたは、さらに簡単です。たとえば、MySQL は SUM( ) が 40 以上になるように必要な行を選択する必要があります。そして、合計プロセスに参加した最後の行の ID を取得します。

4

3 に答える 3

1

3 番目の列に現在の合計を表示します。次に、現在の合計が目標値以下の最後の行を返すだけです。

したがって、テーブルは次のようになります。

ID 数量 RunningTotal
1 10 10
2 30 40
3 20 60

注: テーブル内の行を削除した場合は、後続のすべての行を更新することを忘れないでくださいRunningTotal -= DeletedRow.Quantity

于 2009-01-13T05:47:17.250 に答える
0

テーブル ID に依存することはおそらく悪い考えですが、それが実際に行われている場合は、次のようなことを試すことができます (テストされていません)。

SELECT yourTableA.id
  FROM yourTable AS yourTableA
  JOIN yourTable AS yourTableB
 WHERE ( yourTableA.value + yourTableB.value ) = 40
   AND yourTableA.id != yourTableB.id
 ORDER BY yourTableA.id

このタイプのソリューションは、目標の合計に等しくなるまでに 2 行しか必要ないと予想される場合にのみ機能します。これはほとんどの場合そうではないため、おそらく最善の策は、すべての行を取得して、返されたデータに対してプログラムでこれを行うことです。

lc によって投稿された Running Total ソリューションも良いオプションですが、絶対に必要でない限り、計算されたデータを保存しないようにしています。


このリクエストからの更新された情報に基づいて、別の回答があります。

在庫を気にしているようには聞こえません。製品がいつ入荷したかをより気にします。

SELECT *
  FROM product
 ORDER BY product.receivedData

レコードが入ってくるたびに処理し、そのレコードの価格を保存し、必要なアイテム数に達するまで、必要なだけ処理を続けます。アイテムのリスト、そのレベルの在庫数、およびそのレベルの価格が得られるはずです。

于 2009-01-13T06:03:33.690 に答える
0

あなたの質問がよくわかりません。より適切に言い換えてみてもらえますか?私が解釈したところによると、データベースの構造は次のとおりです。

ProductID    ArrivalDate
   1          10
   2          11
   3          11
   4          11
   5          12
   6          12

ここで、「販売した各製品の価格をどのように知ることができますか?」と尋ねています。データベース内の各値には価格属性がないため、混乱します。データベースが次のようになってはいけません:

ProductID    ArrivalDate    Price
   1          10              100
   2          11              200
   3          11              300
   4          11              300
   5          12              400
   6          12              400

個人的には、販売価格を調べるというあなたの考えには欠陥があると思います。データベースにさらにいくつかのフィールドを追加する方が理にかなっています。

ProductID    ArrivalDate    Price     InStock   DateSold
   1          10              100       Yes        17
   2          11              200       Yes        17
   3          11              300       Yes        18
   4          11              300       Yes        18
   5          12              400       no        
   6          12              400       no        

データベースを変更すると、製品の到着日、販売日、価格、数量などを簡単に追跡できます (実際のフィールドかどうかはわかりません)。

さらに、SQL クエリを分離したり、一部の作業を行うコードを追加したりすることで、作業を簡素化し、作業を楽にすることができます。

于 2009-01-13T07:03:54.677 に答える