问题描述
假设,我已将所有产品代码保存在名为 code_table
的表中,我在这里不代表该表。
我正在尝试获取 sum()
的 LAST INSERT rate
列行。
在我使用的以下代码中,但我无法按预期获得输出。
请帮助我如何获得 foreach 循环下的所有产品 SKU 率。
我已阅读所有主题,但对我没有帮助。
表格 = 测试
ID | product_sku | rate | code
-------------------------------
1 | 1230 | 23 | 111
-------------------------------
2 | 1230 | 25 | 111 //COUNT THIS ROW ONLY
-------------------------------
3 | 1231 | 20 | 222
-------------------------------
4 | 1231 | 26 | 222 //COUNT THIS ROW ONLY
Total SUM WILL BE = 51 // ROW ID 2 + 4 AS 25 + 26 = 51
$sql = $con->prepare("SELECT * FROM `code_table`");
$sql->execute();
foreach ($result as $data => $value) {
$stmt = $con->prepare("SELECT *,SUM(`rate`) AS `totalCost`
FROM `test`
WHERE `code` = :code");
$stmt->execute(array(':code' => $value['product_code']));
while ($data = $stmt->fetch(PDO::FETCH_ASSOC)) {
$sum = 0;
$sum+= $data['totalCost']
}
}
echo $sum; //expected result = 51
解决方法
这里不需要 PHP 循环 - 只需正确查询即可。
您需要为每个代码插入最后一行,因此使用
提取这些行的 IDSELECT max(id) as id FROM myTable group by `code`;
然后将其连接回原始表以提取这些行:
select sum(rate) from myTable
inner join (SELECT max(id) as id FROM myTable group by `code`) sq on (myTable.id = sq.id) ;
最后,将其 INNER JOIN 到 code_table
以按所需代码过滤,并将结果相加:
select sum(rate) from myTable
inner join (SELECT max(id) as id FROM myTable group by `code`) sq on (myTable.id = sq.id)
inner join code_table on (myTable.code = code_table.code);
演示:https://www.db-fiddle.com/f/6ReEYsoQdjHV2XCi8CbRAJ/2
由于这里没有用户数据,因此无需准备查询 - 只需运行它:
$query = "select sum(rate) from myTable inner join (SELECT max(id) as id FROM myTable group by `code`) sq on (myTable.id = sq.id) inner join code_table on (myTable.code = code_table.code)";
$stmt = $con->query($query);
$data = $stmt->fetch();
$total = $data[0]; // 51