0

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

如果被问到,我会提供更多细节。谢谢你!!


这么说吧:我手里真的有6件产品。第一个在 10 日到达我的财产,接下来的 3 个在 11 日到达,最后两个在 12 日到达。

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

对于下一个想要 2 种产品的客户,我会从 11 日开始向他出售最后一次订购 3 种产品的产品,以及 12 日剩余的另一种产品。

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

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

非常感谢你。


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

4

3 回答 3

1

有一个运行总计的第三列。然后,您可以简单地返回运行总计 <= 您的目标值的最后一行。

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

ID 数量 RunningTotal
1 10 10
2 30 40
3 20 60

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

于 2009-01-13T05:47:17.250 回答
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

在每条记录进入时对其进行处理,存储该记录的价格,并根据需要继续进行,直到达到所需的项目数量。您应该最终得到一个项目列表、该级别的库存数量和该级别的价格。

于 2009-01-13T06:03:33.690 回答
0

我不太明白你的问题。你可以尝试更恰当地改写它吗?根据我的解释,这是您的数据库的结构:

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

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

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​​ 查询,甚至添加一些代码来为您完成一些工作,从而简化并让您的生活更轻松。

于 2009-01-13T07:03:54.677 回答