Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/280.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 获取行';s,直到达到数量为止_Php_Mysql - Fatal编程技术网

Php 获取行';s,直到达到数量为止

Php 获取行';s,直到达到数量为止,php,mysql,Php,Mysql,我有一个SQL数据库,我希望在满足客户要求的数量之前获得记录。这就是我的意思。 请求表 Product Quantity Price ----------------------- Apple 10.0 5.00 以下是获取匹配项的SQL查询: SELECT c.FName, p.ProductName, s.Description, s.Quantity, s.Price FROM req

我有一个SQL数据库,我希望在满足客户要求的数量之前获得记录。这就是我的意思。 请求表

Product     Quantity   Price
-----------------------
Apple          10.0      5.00 
以下是获取匹配项的SQL查询:

SELECT c.FName,
       p.ProductName,
       s.Description, 
       s.Quantity, 
       s.Price 
FROM requests r
    INNER JOIN sellers s 
        ON r.ProductID = s.ProductID
   INNER JOIN products p 
        ON p.ProductID=s.ProductID 
   INNER JOIN customers c 
        ON c.ID=s.C_ID       
WHERE r.C_ID = 3 AND r.matchType='Price'
ORDER BY s.Price ASC 
结果如下:

     FName   |   ProductName    |     Description                 |  Quantity  |   Price
    --------------------------------------------------------------------------=
 compny1          Apple                    royal apples fm appleco.      5.0          5.00
    daz            Apple                     sweet apples                6.0          5.50
company2         Apple                       Apples yum                   8.0          9.00 
我希望通过选择行并更新数据库来显示全部请求的10KG数量,即输出应为:

apples @5kg from compny1 = 5.00
apples @5kg from daz = 5.50
total = 10.50
然后,数据库应显示剩余1.0 KG的“Daz”数量。然而,我一直在做这件事。我已尝试做以下工作:

  while ($rows1 = mysql_fetch_assoc($queryQuantity2)){

        if($rows1['Quantity']==$quantityRequested){ //If the first row = 10KG output only this row.
echo $rows1['FName'];
echo $rows1['NameProduct'];
echo $rows1['Quantity'];
echo $rows1['Price'];
}else{
//stuck here check the next rows and see there is 6KG's .. We need 10KG Requested - 5KG from daz(row1) 
//                                                                            -Remaining amount left(i.e.5KG)
//hence, print the output specified above and UPDATE Database where quantity has been reduced by X amount.
}
好的,那么问题是什么。我需要“弥补”10公斤的需求量

现在最“便宜”的方法是按Asc价格对可用的匹配项进行排序,我有

不,我们可以看到第一排显示“compny1”以5.00英镑的价格出售5公斤。。。因此,我们需要10KG,因此显示第1行。。 接下来,由于我们还没有满足10公斤的需求(还需要5公斤),我们来看看第二排。我们看到“daz”卖6公斤。但我们只需要再增加5公斤就可以满足10公斤的需求。 因此,我想做的是。。。更新表格,以便将第一条记录复制到另一个表格,并将第二行更新为剩余1.0kg(6KG-5KG)。因此,向客户展示: 您的10KG可通过以下方式购买:

compny1 5KG@5.00
daz 5KG@5.50
------ 
Total £10.50

这就是我的问题。我不知道如何继续检查行,直到满足要求的数量。我想我需要某种“计数器”来跟踪“到目前为止”已经添加了多少数量,然后检查下一行还需要多少数量。

虽然这可能有一个简化版本,但这应该非常接近:

Select FName, 
  IF(summedQty>10,Quantity-(summedQty-10),Quantity) Quantity,
  Price
From (
  Select 
    FName, 
    Quantity, 
    Price,
    @qtySum:=IF(@qtySum>10,10000,@qtySum+Quantity) summedQty
  From Results
    Join (Select @qtySum:=0) t
  Order By Price
  ) t
Where summedQty != 10000
我使用10000作为一个任意值,我知道我永远不会达到这个值——只要确保它高于任何潜在值。在我使用10的任何地方,都需要用最大值替换

如果您不想使用任意值,这似乎也可以:

Select FName, 
  IF(summedQty>10,Quantity-(summedQty-10),Quantity) Quantity,
  Price
From (
  Select 
    FName, 
    Quantity, 
    Price,
    @qtySum:=@qtySum+Quantity summedQty
  From Results
    Join (Select @qtySum:=0) t
  Order By Price
  ) t
Where IF(summedQty>10,Quantity-(summedQty-10),Quantity) > 0


正如我所说的,我相信会有一些变化,但这应该会让您朝着正确的方向前进。

那么,您是否希望在满足特定标准(本例中为10)后停止返回结果?daz退回的苹果怎么能得到5.50美元,因为6个要5.50美元——5个要4.58美元吗?只是想了解你的问题。@sgedes是的。一旦数量得到满足(本例中为10kg),需求就得到满足,因此无需显示更多行。是的,对不起,这只是样品和测试数据。之后,我会将其更改为每公斤的价格,然后对列表进行排序。您好,谢谢您的回复。这听起来可能很愚蠢,但我使用的是mySQL(PHP myAdmin),在SQL查询中使用IF之前,我还没有见过这种语法。您可以使用这些类型的php/sql查询吗?另外,10KG仅适用于该客户,其他客户将有不同的需求量。我理想的想法是使用PHP处理结果并更新表。然而,我不知道该怎么做:'(@Jsmith——你绝对可以在PHP的sql语句中使用IF语句——有效的sql语法。你需要用特定于该客户的任何值替换10。我试图给你一个MySQL解决方案,而不是PHP解决方案。顺便说一句,我肯定你注意到了,我使用了一个假的结果表——用实际的查询替换它。Best问候!谢谢你的建议,我会用它来帮助我解决问题。我只是想也许使用PHP会让我自己更容易理解,因为我以前没有真正使用过这种SQL语法:)@Jsmith--np,希望能有所帮助。我对php了解不够,无法提供解决方案。祝你好运。再次感谢。如果你有时间的话。如果你能像我在这里解释的那样查看此链接,并对我希望实现的目标进行更多解释,我将不胜感激。谢谢:)