查询在线工作,但不在本地计算机上工作

时间:2018-11-16 11:56:37

标签: php mysql mysqli group-by

我查询的目标是确定所有具有本周应付款发票的供应商。因此,目标是每个供应商只有一个条目,确定应在本周显示的条目。

所以我的主要问题是为什么查询可以在线运行但不能在本地计算机上运行?

要弄清楚我到目前为止使用的按组蚂蚁,到目前为止,它还在工作!现在,我已经有了本地服务器上在线内容的副本,它停止了应有的工作。

我有此查询在线运行,并且一切正常:

$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

  • 通过HTML结果打印屏幕:

enter image description here

  • 控制台打印结果

enter image description here

1 个答案:

答案 0 :(得分:1)

您是否正在使用两种不同版本的mysql,一种版本在服务器上早于5.6,而另一种版本在本地。.按行为改变group by从d.6开始,然后执行  您正在使用不带汇总功能的分组方式
 

在mysql的最新版本中不允许在SQL中弃用此功能,而对于最旧的版本,未包含在组中的列值的结果是不可预测的..

因此,如果您只希望获得不同的结果,则可以使用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";