这是给我一个错误的查询。如果我在本地服务器上运行此代码,则工作正常。但是在我的实时服务器中,它显示错误。我认为此错误与服务器配置有关,因此我增加了实时服务器的max_allowed_packet选项。但是仍然出现相同的错误
$dueClassification = "
SELECT installmentNo,collection_date,lastInstallmentDate,sales_date,sales_bill_no,installment_amount,pay_amount,total_sales_amount
FROM collection
WHERE sales_type =2 AND collection_date <= '$endDate'
AND sales_bill_no IN ('" . implode("','", $currentPeriodSalesBillNoArr) . "')";
答案 0 :(得分:0)
根据mysql docs,IN列表中的值数仅受参数max_allowed_packet限制。
您可以尝试增加此参数的大小(默认值为64 Mb,最大值为1Go)。
当这种方法失败时,下一个选择是使用JOIN查询。这可能甚至更快,因为您将只执行一个查询,而不是当前实施中的两个查询(之间使用php处理)。确切的语法取决于您如何恢复列表-您没有向我们展示代码的那部分。
NB:如果列表中的值为数字,则不应引用IN子句的参数;这不一定能解决列表大小的问题(特别是如果数字很小的话),但可以使您的查询更高效。