【发布时间】:2016-11-21 13:57:38
【问题描述】:
这是我的 MySQL 查询:
$query = "SELECT
ws_inventory.id,
ws_inventory.SKU AS inventory_sku,
ws_inventory.Quantity AS inventory_quantity,
ws_mastersku.SKU_1,
ws_mastersku.SKU_2,
ws_mastersku.SKU_4,
ws_mastersku.SKU_3,
ws_mastersku.MultSKU,
ws_mastersku.QtySKU,
ws_mastersku.AltSKU,
ws_mastersku.SKU,
ws_sold.SKU AS sold_sku,
ws_sold.Quantity AS sold_quantity
FROM ws_sold
LEFT OUTER JOIN ws_mastersku
ON ws_sold.sku = ws_mastersku.SKU
LEFT OUTER JOIN ws_inventory
ON ws_mastersku.SKU_1 = ws_inventory.SKU
OR ws_mastersku.AltSKU = ws_inventory.SKU
GROUP BY ws_sold.sku;";
但它只返回 WS16 的第一个实例
即使我的表有两个 WS16 条目
如何修改我的查询以选择所有行? (在我的最后一张图片中,它省略了第 4 行)
新的选择查询应该是这样的(你可以在这里看到第四列)
1 WS16 91 (null) (null) (null) (null) 0 4 WS16 WS16X4-2 WS16X4-2 2
2 WS3 97 (null) (null) (null) (null) 0 2 WS3 WS3X2-4 WS3X2-4 1
3 WS6 95 (null) (null) (null) (null) 0 4 WS6 WS6X4-16 WS6X4-16 1
4 WS16 75 (null) (null) (null) (null) 0 4 WS16 WS16X4-2 WS16X4-2 4
根据 Keith 和 Tim 的友好回复,我尝试了不带 GROUP BY 子句的查询,这是我的结果
这是朝着正确方向迈出的一步,但inventory_quantity 是错误的..
这是因为在我的 PHP 脚本中我正在做
$newQuantity = $rs['inventory_quantity'] - ($rs['sold_quantity'] * $rs['QtySKU']);
我的while循环中脚本的输出是
UPDATE ws_inventory SET Quantity = 91 WHERE SKU = 'WS16'
紧随其后
UPDATE ws_inventory SET Quantity = 83 WHERE SKU = 'WS16'
问题是因为inventory_quantity 在开始查询时被采用。
第一条语句的数量是 -8(开始 99),第二条语句是 -16(开始 99)。需要知道找出一种获取它的方法,以便在这种情况下语句可以相互配合,并执行 99 - 8 - 16 = 75 而不是仅仅覆盖结果..
【问题讨论】:
-
你真正想要什么输出?您当前的查询与您使用
GROUP BY的方式有问题。 -
不...更新您的问题并向我们展示您想要的输出。除非您有不同的期望,否则 Keith 建议完全放弃
GROUP BY可能是正确的。 -
您要汇总数量吗?
-
现在我想起来了,查询不应该对数量做任何特殊的事情。我将此 SELECT 语句与一个 PHP 脚本结合使用,该脚本为我做数学计算。这背后的逻辑是
$rs['inventory_quantity'] - ($rs['sold_quantity'] * $rs['QtySKU']);,但我认为这无关紧要,因为我只是遇到了查询问题。 -
好的,我刚刚发表了这个评论,现在我认为这无关紧要,因为我也许能够找到一种方法来修复 PHP 中的逻辑......但如果有如何在 MySQL 中做到这一点?我在想如果我能在查询中把它记下来会容易得多
标签: mysql