MySQL选择总和的记录

时间:2009-01-13 05:39:09

标签: php mysql sum

我正在使用MySQL和PHP。我有一个包含列id和数量的表。我想检索总和数量的最后一行的id,因为它在总和时达到数字40。更具体。我在数据库中有3行。一个数量为10,一个数量为30,另一个数量为20.因此,如果我将数量相加得到结果40,我会总结前两个女巫的意思:10 + 30 = 40.这样,最后一个Id用于将数字40加起来为2.我只想知道用于完成总和40的最后一行的id。

如果被问到,我会提供进一步的细节。谢谢!!


让我这样说吧: 我手里拿着6件产品。第一个来自我在10日的占有,接下来的3个来自11日,最后2个来自12日。

现在,我想从我的库存中销售3种产品。并希望按照他们来的顺序出售它们。因此,对于想要3种产品的客户,我会向他出售10种产品和2种产品.11。

对于想要2个产品的下一个客户,我会从11个日期开始向他销售一个产品,该产品仍然是3个产品的最后一个订单,而另一个产品来自12个产品。

问题是我怎么知道我卖的每件产品的价格是多少?我想如果我能找出哪些行总结了每个请求的数量,我会知道每次我想要交付订单时从哪里开始。首先,我会看看哪些行总结了3个产品并保留了条目ID。对于下一个订单,我将从该ID和总和开始计数,直到它总结了2个产品的第二个订单,依此类推。我这么想,我可以跟踪每种产品的进货价格。所以我不会以12日的价格以第一个价格出售产品。

我希望你理解。我只需要知道我的产品价格是多少,所以我知道第一批产品会有一个价格,但随着产品价格上涨,我必须提高价格......所以最后的产品必须卖给更高的价格。如果我跟踪这个,我只能做到这一点...

非常感谢。


没人?或者,更简单:MySQL应该为SUM(quantity)选择所需的行,例如高于或等于40。然后让我得到参与总和过程的最后一行的ID。

3 个答案:

答案 0 :(得分:1)

拥有第三列的总计。然后,您只需返回运行总计< =目标值的最后一行。

所以你的表应该是这样的:

ID    Quantity    RunningTotal
1           10              10
2           30              40
3           20              60

注意:如果删除表格中的行,请记住更新所有后续行RunningTotal -= DeletedRow.Quantity

答案 1 :(得分:0)

依赖表ID可能是一个坏主意,但如果真的如此,你可以尝试这样的事情(未经测试):

SELECT yourTableA.id
  FROM yourTable AS yourTableA
  JOIN yourTable AS yourTableB
 WHERE ( yourTableA.value + yourTableB.value ) = 40
   AND yourTableA.id != yourTableB.id
 ORDER BY yourTableA.id

这种类型的解决方案只有在您期望只需要两行才能达到目标总和时才有效。由于这种情况很可能并非如此,您最好的选择是尝试获取所有行并以编程方式对返回的数据执行此操作。

lc发布的Running Total解决方案也是一个不错的选择,尽管我通常会尽量避免存储计算数据,除非我绝对必须这样做。


根据此请求的更新信息,我有另一个答案。

这听起来并不像你关心库存。您更关心产品何时进入。

SELECT *
  FROM product
 ORDER BY product.receivedData

处理每条记录,存储该记录的价格,并在需要时继续使用,直到达到所需的项目数。您应该最终得到一个项目列表,该级别的库存数量以及该级别的价格。

答案 2 :(得分:0)

我不太了解你的问题。你能尝试更正确地重写它吗?根据我的解释,这是数据库的结构:

ProductID    ArrivalDate
   1          10
   2          11
   3          11
   4          11
   5          12
   6          12

现在你问,“我怎么知道我销售的每件产品的价格?”哪种类型让我感到困惑,因为数据库中的每个值都没有price属性。你的数据库不应该是这样的:

ProductID    ArrivalDate    Price
   1          10              100
   2          11              200
   3          11              300
   4          11              300
   5          12              400
   6          12              400

就我个人而言,我认为找出售价的想法是有缺陷的。在数据库中添加更多字段会更有意义:

ProductID    ArrivalDate    Price     InStock   DateSold
   1          10              100       Yes        17
   2          11              200       Yes        17
   3          11              300       Yes        18
   4          11              300       Yes        18
   5          12              400       no        
   6          12              400       no        

在更改数据库时,您可以轻松跟踪产品何时到货,销售日期,价格,数量(我无法确定其是否为实际字段)。

此外,您可以通过分离SQL查询,甚至添加一些代码来为您完成某些工作,从而简化并简化您的生活。