5

我有一张包含以下信息的表格:

编号 | 商品编号 | stock_package_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


我的问题是我正在尝试创建一个查询(尽可能简单,因为该表将与其他一些表连接),这将允许我输入一个金额:

例如

我想先从最便宜的价格中选择 22 个 Item_Id 775。

所以我想要返回的是:

编号 | 商品编号 | stock_package_id | 金额 | 价格
4 | 775 | 5 | 10 | 0.10
0 | 775 | 1 | 12 | 0.22 - 这只是 12,因为我们只想要总共 22

一个伪例子:

从 stock_table 中选择,直到总和amount等于或大于输入数字 (22) 按价格排序

这可能与MySql有关吗?

4

2 回答 2

6

您需要使用ORDER BY子句根据price列对记录进行排序:

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

如果你想获取记录直到sum(price)变成value(22) 然后试试这个:

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 回答