php - 无效使用群组功能

标签 php mysql

大部分查询都放在变量中,但为了这个问题的目的,我将它们包含在查询中。边距是其上方所有别名查询的总和 ($margin)。

我收到错误:

SQLSTATE[HY000]:一般错误:1111 公司性能控制.php 第 117 行中组函数的使用无效

这是我的查询:

$margin = $invoicesOut.'-'.$costs.'+'.$creditsIn.'-'.$creditsOut ;

$result = $dbh->query("SELECT CONCAT(MONTH(invoices_out.date), '/', YEAR(invoices_out.date)) AS theDate,
                           SUM(COALESCE(
                           (SELECT SUM(invoices_out.net/rate)
                                FROM invoices_out, (SELECT jobRef, invoiceRef FROM invoices_out_reference GROUP BY invoiceRef) AS unique_references
                                WHERE unique_references.invoiceRef = invoices_out.id
                                AND unique_references.jobRef = jobs.id
                           ),
                       0)) AS invoiced,
                           SUM((SELECT SUM((quantity*parts_trading.sellingNet)/currencies.rateVsPound)
                FROM parts_trading, currencies
                WHERE parts_trading.sellingCurrency = currencies.id
                AND parts_trading.enquiryRef = enquiries.id
                AND jobs.id NOT IN
                    (SELECT DISTINCT jobRef FROM invoices_out_reference)
            )
            +
            COALESCE(
            (SELECT SUM(enquiries_custom_fees.feeAmountNet/currencies.rateVsPound)
                FROM enquiries_custom_fees, parts_trading, currencies
                WHERE enquiries_custom_fees.enquiryRef = enquiries.id
                AND enquiries_custom_fees.enquiryRef = parts_trading.enquiryRef
                AND parts_trading.sellingCurrency = currencies.id
            ),
            0
            )) AS pending,
                           SUM(COALESCE(
                (SELECT SUM(net)
                FROM credit_notes_supplier, parts_trading_buying
                WHERE credit_notes_supplier.partRef = parts_trading_buying.id
                AND parts_trading_buying.enquiryRef = enquiries.id)
              ,0
              )) AS creditsIn,
                           SUM(COALESCE(
                (SELECT SUM(net)
                FROM credit_notes_customer, parts_trading
                WHERE credit_notes_customer.partRef = parts_trading.id
                AND parts_trading.enquiryRef = enquiries.id)
               ,0
               )) AS creditsOut,
                           SUM(((SELECT SUM(qty*(parts_trading_buying.buyingNet/currencies.rateVsPound))
                FROM parts_trading_buying, currencies
                WHERE parts_trading_buying.buyingCurrency = currencies.id
                AND parts_trading_buying.enquiryRef = enquiries.id
          )
          +
          COALESCE(
          (SELECT SUM(parts_trading_buying_charges.feeAmountNet)
               FROM parts_trading_buying_charges, parts_trading_buying
               WHERE parts_trading_buying_charges.partRef = parts_trading_buying.id
               AND parts_trading_buying.enquiryRef = enquiries.id
          )
          , 0))) AS costs,
                           SUM($margin) AS margin
                           FROM jobs, enquiries, invoices_out,
                           (SELECT jobRef, invoiceRef
                                FROM invoices_out_reference
                                GROUP BY invoiceRef
                           ) AS unique_invoice_refs
                           WHERE enquiries.id = jobs.enquiryRef
                           AND unique_invoice_refs.invoiceRef = invoices_out.id
                           AND jobs.id = unique_invoice_refs.jobRef
                           AND jobs.stateRef != 1
                           AND jobs.stateRef != 5
                           GROUP BY YEAR(invoices_out.date), MONTH(invoices_out.date)") ;
<小时/>

我已将范围缩小到这些:

SUM($creditsIn) AS creditsIn
SUM($creditsOut) AS creditsOut

定义为:

$creditsIn = 'COALESCE(
                    (SELECT SUM(net)
                    FROM credit_notes_supplier, parts_trading_buying
                    WHERE credit_notes_supplier.partRef = parts_trading_buying.id
                    AND parts_trading_buying.enquiryRef = enquiries.id)
                  ,0
                  )' ;

    $creditsOut = 'COALESCE(
                    (SELECT SUM(net)
                    FROM credit_notes_customer, parts_trading
                    WHERE credit_notes_customer.partRef = parts_trading.id
                    AND parts_trading.enquiryRef = enquiries.id)
                   ,0
                   )' ;

最佳答案

多么大的查询!

解决这个问题。只需一次删除每个子查询并确定哪个查询导致了这一情况。

关于php - 无效使用群组功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10714570/

相关文章:

php - MySQL 多对多。删除还是编辑?

mysql - Rails 将日期时间保存到 MySQL 数据库

php - iOS 使用 http post/get 从 tableView 远程删除行

php - laravel Mysql 希腊字母显示怎么样?

php - 使用 Eloquent ORM 进行 CREATE 操作显示 500 内部服务器错误

MySql 和 Visual Studio 2013 集成

php - 如果一个元素很常见,如何从php中的多行中选择数据

PHP PDO setAttribute 和错误处理

php - 发送新值后自动刷新下拉列表

php - 将数字四舍五入到最近的间隔