mysql - 使用连接和嵌套查询计算数量

标签 mysql sql

我正在尝试计算存储在 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/

相关文章:

java - 我应该将 ACL 表插入我的数据库还是创建一个单独的数据库?

php - 使用 PHP 从 HP ALM 导出所有缺陷

mysql - 配方数据库,按成分搜索

sql - 数据库表中一列中的前两个字符大写

sql - 使用 Go 插入到 Postgresql 表中

sql - 在pyspark中实现MERGE INTO sql

php - 我可以在 PHP 中混合使用 MySQL API 吗?

php - 如何知道在 ON DUPLICATE KEY UPDATE 查询之后是否更新或插入了一行

mysql - 当表中没有 null 时返回 null 的日期

sql - 在 golang 中使用准备好的语句时,是否总是需要延迟 stmt.close()?