2012-08-13 52 views
4

我有一個表具有以下信息的總和:Mysql的選擇行的

 

id |  Item ID  | stock_package_id | amount | price 
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 


我的問題是我想要創建一個查詢(簡單越好,因爲這表將留下一個加盟幾個其他桌子),這將允許我輸入金額:

eg

我希望Item_Id 775中的22個先從最便宜的價格中選擇。

所以,我想回的是:

 

id |  Item ID  | stock_package_id | amount | price 
4 |  775  |   5  | 10 | 0.10 
0 |  775  |   1  | 12 | 0.22 - this is only 12 as we only want 22 total 

一個04-0030-03例如:

從stock_table選擇,直到amount總和大於輸入數(22)按價格

爲了等於或大於

這可能與MySql有關嗎?

+0

嗯。 「有和」 允許你設置的相加條件..和「訂單按......上升「可以讓你訂購金額。 – 2012-08-13 10:52:57

+0

你可以修改「我想要返回什麼」到你真正想要的東西嗎?我看不到一個SUM(..)'d列,22有 – Martin 2012-08-13 10:54:16

+0

@Martin這是點。它應該顯示我只有22行。 – james 2012-08-13 10:58:25

回答

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 
5

您需要根據price列使用ORDER BY子句對記錄進行排序:

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; 
+2

OP要sum'amount'等於22 – 2012-08-13 10:49:51

+1

這不會限制爲22行不總和的數量是== 22嗎? – james 2012-08-13 10:52:59

+0

謝謝! @james:右鍵更新了我的帖子。 – Omesh 2012-08-13 10:56:03