5

次の情報を含むテーブルがあります。

ID | アイテム ID | 在庫_パッケージ_id | 金額 | 価格
0 | 775 | 1 | 16 | 0.22
1 | 758 | 2 | 10 | 0.28
2 | 775 | 3 | 10 | 0.30
3 | 774 | 4 | 10 | 0.25
4 | 775 | 5 | 10 | 0.10
5 | 775 | 6 | 10 | 0.55


私の問題は、金額を入力できるクエリを作成しようとしていることです(このテーブルは他のいくつかのテーブルと結合されたままになるため、できるだけ単純です)。

例えば

Item_Id 775 の 22 個が最安値から最初に選択されます。

したがって、私が返したいのは次のとおりです。

ID | アイテム ID | 在庫_パッケージ_id | 金額 | 価格
4 | 775 | 5 | 10 | 0.10
0 | 775 | 1 | 12 | 0.22 - 合計 22 だけが必要なので、これは 12 だけです。

擬似的な例:

amountの合計が入力数 (22) 以上になるまで、stock_table から選択します。

これはMySqlで行うことができますか?

4

2 に答える 2

6

ORDER BYに基づいてレコードをソートするには、句を使用する必要があります。price

SELECT *
FROM table_name
WHERE Item_ID = 775
ORDER BY price ASC
LIMIT 22;

(22) にsum(price)なるまでレコードを取得する場合は、次のようにします。value

SELECT *
FROM table_name, (SELECT @var_price := 0) a
WHERE Item_ID = 775 AND
      (@var_price := @var_price + price) <= 22
ORDER BY price ASC;
于 2012-08-13T10:48:42.807 に答える
4

スキーマ:

 CREATE TABLE table1
(`id` int, `Item_ID` int, `stock_package_id` int, `amount` int, `price` float);

 INSERT INTO table1
(`id`, `Item_ID`, `stock_package_id`, `amount`, `price`)
 VALUES
(0, 775, 1, 16, 0.22),
(1, 758, 2, 10, 0.28),
(2, 775, 3, 10, 0.30),
(3, 774, 4, 10, 0.25),
(4, 775, 5, 10, 0.10),
(5, 775, 6, 10, 0.55);

取得する設定量:

SET @var_amount = 22;

金額の選択:

SELECT * FROM (
SELECT table1.*, if ((@var_amount := @var_amount - amount) > 0, amount, amount +  @var_amount) as buy_amount
FROM table1
WHERE Item_ID = 775
ORDER BY price ASC
) AS tmp 
WHERE buy_amount > 0

結果:

id  Item_ID stock_package_id    amount  price   buy_amount
4   775 5                       10      0.1     10
0   775 1                       16      0.22    12
于 2012-08-13T13:35:05.547 に答える