Php 获取行';s,直到达到数量为止
我有一个SQL数据库,我希望在满足客户要求的数量之前获得记录。这就是我的意思。 请求表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
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了解不够,无法提供解决方案。祝你好运。再次感谢。如果你有时间的话。如果你能像我在这里解释的那样查看此链接,并对我希望实现的目标进行更多解释,我将不胜感激。谢谢:)