我查询的目标是确定所有具有本周应付款发票的供应商。因此,目标是每个供应商只有一个条目,确定应在本周显示的条目。
所以我的主要问题是为什么查询可以在线运行但不能在本地计算机上运行?
要弄清楚我到目前为止使用的按组蚂蚁,到目前为止,它还在工作!现在,我已经有了本地服务器上在线内容的副本,它停止了应有的工作。
我有此查询在线运行,并且一切正常:
$query_facturas_group = "SELECT TbFacturas.PkFacturas, TbFacturas.FkFornecedor, TbFacturas.FacturaData, TbFacturas.FacturaValor, TbFacturas.FacturaNumero, TbFacturas.FacturaEstado, TbFacturas.FacturaDataPagamento, Fornecedores.PkFornecedor, Fornecedores.NomeFornecedor, Fornecedores.EmailFornecedor
FROM TbFacturas
LEFT JOIN Fornecedores ON TbFacturas.FkFornecedor=Fornecedores.PkFornecedor
WHERE TbFacturas.FacturaDataPagamento<'$pay_day' AND TbFacturas.FacturaEstado='0' AND TbFacturas.FacturaTrash='0'
GROUP BY TbFacturas.FkFornecedor
ORDER BY Fornecedores.NomeFornecedor ASC";
问题是,当我尝试在本地运行它(进行一些更改并升级)时,它停止工作(无结果)。
此外,当我直接在MySQL控制台中运行它时,效果很好...
我开始删除部分代码,并且可以正常工作(但没有给我我想要的结果...)
我删除GROUP BY
语句后,它开始起作用-但未达到预期结果...
我尝试将其与SELECT DISTINCT
一起使用,但没有成功,因为它仍然显示重复供应商名称(Fornecedores.NomeFornecedor
字段)。
有没有猜到??
更新:
我注意到我的项目中还有一个查询不适用于GROUP BY
答案 0 :(得分:1)
您是否正在使用两种不同版本的mysql,一种版本在服务器上早于5.6,而另一种版本在本地。.按行为改变group by从d.6开始,然后执行
您正在使用不带汇总功能的分组方式
因此,如果您只希望获得不同的结果,则可以使用DISTINCT避免分组依据
$query_facturas_group = "SELECT DISTINCT TbFacturas.PkFacturas
, TbFacturas.FkFornecedor
, TbFacturas.FacturaData
, TbFacturas.FacturaValor
, TbFacturas.FacturaNumero
, TbFacturas.FacturaEstado
, TbFacturas.FacturaDataPagamento
, Fornecedores.PkFornecedor
, Fornecedores.NomeFornecedor
, Fornecedores.EmailFornecedor
FROM TbFacturas
LEFT JOIN Fornecedores ON TbFacturas.FkFornecedor=Fornecedores.PkFornecedor
ORDER BY Fornecedores.NomeFornecedor ASC";
如果只想减少行数,则应使用聚集函数并将其分组,例如min()或max()
$query_facturas_group = "SELECT
min(TbFacturas.PkFacturas)
, TbFacturas.FkFornecedor
, min(TbFacturas.FacturaData)
, min(TbFacturas.FacturaValor)
, min(TbFacturas.FacturaNumero)
, min(TbFacturas.FacturaEstado)
, min(TbFacturas.FacturaDataPagamento)
, min(Fornecedores.PkFornecedor)
, min(Fornecedores.NomeFornecedor)
, min(Fornecedores.EmailFornecedor )
FROM TbFacturas
LEFT JOIN Fornecedores ON TbFacturas.FkFornecedor=Fornecedores.PkFornecedor
WHERE TbFacturas.FacturaDataPagamento<'$pay_day' AND TbFacturas.FacturaEstado='0' AND TbFacturas.FacturaTrash='0'
GROUP BY TbFacturas.FkFornecedor
ORDER BY Fornecedores.NomeFornecedor ASC";