我尝试从数据库中获取最多 (30) 个订购的产品。
在表顺序中,我有一个列类型,其值为(1 OR -1)。1 表示有效的用户订单,-1 表示取消订单(在这种情况下,订单具有用户订单的参考 ID)
reference_id 是另一个订单的id(在同一个订单表中)| 一行引用另一行。
订单表:
id | reference_id | type
----------------------------------
1 | | 1
----------------------------------
2 | | 1
----------------------------------
3 | 1 | -1
----------------------------------
产品表:
id | order_id | quantity
----------------------------------
a | 1 | 4
----------------------------------
b | 2 | 7
----------------------------------
a | 3 | 2
----------------------------------
MySQL 查询:
SELECT *, sum(product.quantity) as quantity, count(*) as score
FROM product LEFT JOIN order ON ( product.order_id=order.id )
WHERE (..?..) GROUP BY product.id ORDER BY score DESC LIMIT 30;
这将选择、汇总和计算所有订单中的所有产品。
但:
我正在寻找的是:
if(order.type < 0 ){
product.quantity is in minus(-)
(quantity of the Product in the referenced Order MINUS this.product.quantity)
}
如何在 SQL 语句中做到这一点?我尝试了很多东西但没有成功
根据要求的评论示例: 结果应该是按 product.id 分组的已订购产品的列表 大多数订购产品:
Product-id | quantity
-------------------------------------------
a | 2 (in 2 Orders)
-------------------------------------------
b | 7 (in 1 Order)
-------------------------------------------
c | 12 (in 3 Orders)
-------------------------------------------
...etc.
非常感谢