我正在尝试计算存储在 xcart_order_details 中的有效销售订单的库存数量。我还想只计算 x 天内下订单的库存,这些订单的状态为已处理“P”或排队“Q”,并且库存类型是否与某些位置匹配; C1库存、C2库存等。
这在我们以前的xcart数据库中比较简单;
SELECT COUNT(`amount`)
FROM `xcart_order_details`
WHERE `productid` IN (
SELECT `productid`
FROM `xcart_products` WHERE `orderid` IN
(SELECT `orderid`
FROM `xcart_orders`
WHERE `date` > ".$date_range."
AND (`status` = 'P'
OR `status` = 'Q'))
AND (LOWER(param01) = 'c1 stock'
OR LOWER(param01) = 'c2 stock'
OR LOWER(param01) = 'g stock'
OR LOWER(param01) = 'stock')
AND `productid` = ".$safe_prodid.")
此查询有效。但是现在我们的库存位置存储在另一个名为 xcart_extra_field_values 的表中,并且必须在 fieldid = 5 处检索;
我尝试使用连接从 xcart_extra_field_values 中获取值字段,其中 fieldid = 5,并尝试执行我在上面的查询中所做的操作,但它不起作用。
SELECT COUNT(`a.amount`)
FROM xcart_order_details a,
xcart_extra_field_values b
WHERE a.productid IN (
SELECT productid
FROM xcart_products WHERE orderid IN
(SELECT orderid
FROM xcart_orders
WHERE date > 1409529600
AND (status = 'P'
OR status = 'Q'))
AND (LOWER(b.value) = 'c1 stock'
OR LOWER(b.value) = 'c2 stock'
OR LOWER(b.value) = 'g stock'
OR LOWER(b.value) = 'stock')
AND (a.productid = b.productid)
AND (a.productid = 4169)
AND (b.fieldid = 5)
不幸的是,这个查询不起作用,我知道这是一个语法问题,但我得到的错误没有任何帮助。
任何人都可以阐明我做错了什么吗?
最佳答案
您缺少连接两个表的标准。假设表 xcart_extra_field_values 中有一个 xcart_order_details_id,然后使用它。
毕竟,您甚至不必加入。您想要来自 xcart_order_details 的结果,其中存在某些详细值记录:
SELECT COUNT(`amount`)
FROM `xcart_order_details`
WHERE `productid` IN
(
SELECT `productid`
FROM `xcart_products`
WHERE `orderid` IN
(
SELECT `orderid`
FROM `xcart_orders`
WHERE `date` > ".$date_range."
AND `status` IN ('P','Q')
)
AND `productid` = ".$safe_prodid."
AND EXISTS
(
SELECT *
FROM xcart_extra_field_values v
WHERE v.xcart_order_details_id = xcart_order_details.id
AND fieldid = 5
AND LOWER(param01) IN ('c1 stock','c2 stock','g stock','stock')
);
顺便说一句:您数一数有多少订单详细记录有金额?
关于mysql - 使用连接和嵌套查询计算数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26016080/