2009-03-03 7 views
1

1つのフィールドの合計から特定の数が満たされるまでレコードを選択することについて、ここにいくつかの投稿がありますが、私に合ったものはありません。私はPHPとMySQLを使用しています。合計のMySQLレコードから選択

私は数量という名前のテーブルを持っています。内部には製品名、製品価格、製品数のレコードがあります。これらのほかに、日付と位置に基づいて最後のレコードを選択するのに役立ついくつかの他に、同じ商品の価格が異なる数量があるので、GROUP BYという名前のフィールドがあります。だから、私は現在、このように私の製品固有の価格と数量を選択:

SELECT `price`,`quantity` FROM (SELECT `price`,`quantity` FROM `quantity` WHERE `product_name` = 'DELL' ORDER BY `date` DESC, `position`) AS `Actions` GROUP BY `price` 

私はこのようなデータを取得する必要があるため、このクエリは回避策です:私はこれらのような複数のレコードを持っている

product_name | price | quantity 

DELL   |  100 |  30 
DELL   |  120 |  10 
DELL   |  130 |  2 

asuming私はそれらの最新情報を入手する必要があります。とにかく、このクエリから、私は次のことをする必要があります:他の製品の数量が35に等しい数量のレコードを選択する必要があります。したがって、私のクエリを使って、30行の製品を取ることができるので、 100ドルの価格と120ドルの価格を持つ2番のラインからの5つの製品があります。そして、私は自分のアップデートを入力する必要があります。したがって、新しいデータは次のようになります:

product_name | price | quantity 

DELL   |  100 |  0 
DELL   |  120 |  5 
DELL   |  130 |  2 

どのように私はこれを達成しようとしていますか?私の詳細がはっきりしていることを願う。質問してください。

ありがとうございました!

答えて

1

オプション1:使用するプログラムロジックの代わりにクエリの:

より高度なデータベースの相互作用を行うために、プログラミング層を使用しては何も問題はありません。 SQLはすべてのことに対する答えではありません...(ストアドプロシージャも考えてください)。このオプションで

を、あなたが導出問合せを使用して、実行中の合計を取得し、中に特定のレコードにそれを絞り込む:

enough = 35 
running_total = 0 

START TRANSACTION 
while running_total < enough: 
    select one record order by price limit 1 FOR UPDATE 
    add to running_total 

UPDATE records... 
COMMIT 

オプション2:現在の合計でクエリを使用してください外側のクエリそれらを更新するつもりなら、適切な分離レベルのトランザクションでこれをラップする必要があります。

SET @running_total = 0; 
SELECT 
    row_id, 
    product_name, 
    price, 
    quantity 
FROM 
    (
    SELECT 
     row_id, 
     product_name, 
     price, 
     quantity, 
     @running_total := @running_total + quantity AS running_total 
    FROM 
     sometable 
    WHERE 
     quantity > 0 
    ORDER BY 
     quantity 
    LIMIT 
     35 /* for performance reasons :) */ 
    ) as T1 
WHERE 
    running_total < 35 

それがより「明白」であるので、私はオプション1を好む傾向にあるだろうが、おそらくこれはあなたの思考のためのいくつかの食べ物を与えるだろう。

+0

私は最初の方法を使用しました。私はそれに取り組むことがたくさんある。とにかく、これは私が始めるのを助けました。ありがとう –

関連する問題