запрос работает онлайн, но не на локальной машине - PullRequest
0 голосов
/ 16 ноября 2018

Цель моего запроса - идентифицировать всех поставщиков по счетам за эту неделю.Таким образом, цель состоит в том, чтобы иметь только одну запись для каждого поставщика, идентифицирующую те, которые должны быть показаны на этой неделе.

ТАК, мой большой вопрос, почему запрос работает онлайн, а не на локальной машине?

Чтобы получить это, я использовал группу заявлением, и это работало до сих пор!Теперь, когда у меня есть копия того, что было в сети на моем локальном сервере, он перестал работать как надо.

У меня есть этот запрос, работающий в сети, и все прекрасно работает:

$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 голосов
/ 16 ноября 2018

Может быть, вы используете две разные версии mysql, одну более старую, чем 5.6, на сервере и одну более свежую локально. Групповое поведение изменяется начиная с d.6, и вы используете тот факт, что используете group by без функции агрегирования
это не рекомендуется в SQL, это не разрешено в самой последней версии mysql, и для самой старой версииe результат для значений столбцов, не включенных в группу, непредсказуем.

, поэтому, если вы просто хотите получить отдельный результат, вы можете использовать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";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...