Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Mysql选择行的总和为_Php_Mysql_Select_Sum - Fatal编程技术网

Php Mysql选择行的总和为

Php Mysql选择行的总和为,php,mysql,select,sum,Php,Mysql,Select,Sum,我有一张包含以下信息的表格: 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

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

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 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 我的问题是我正在尝试创建一个查询(尽可能简单,因为此表将与其他几个表保持连接),该查询将允许我输入金额:

e、 g

我想要22件775号商品,先从最便宜的价格中挑选

因此,我希望得到的回报是:

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 id |项目id |库存|包装| id |金额|价格 4 | 775 | 5 | 10 | 0.10 0 | 775 | 1 | 12 | 0.22-这仅仅是12,因为我们总共只想要22 比苏多的一个例子:

从stock_表中选择,直到
金额之和等于或大于按价格输入的编号(22)order by price


MySql是否可以这样做?

您需要使用
orderby
子句根据
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;
选择*
从表_name中,(选择@var_price:=0)a
其中,项目ID=775,且
(@var\u price:=@var\u price+price)Schema:

 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

OP希望总和<代码>金额<代码>等于22行,这不是限制为22行吗?金额总和==22?这似乎更接近。虽然我将在下一个额外的阶段删除发现的“多余”库存,但您的示例似乎只返回我实际需要的行。仅在测试中,它应该是直到amount==22,而不是price。尝试将+价格更改为+金额,但没有成功。。“求和”允许您设置求和的条件。。“按…升序订购”可以让你订购数量。你能把“我想要的退货”改成你真正想要的吗?我看不到包含22的SUM(..)d列there@Martin这就是重点。它应该只显示最多22行。