ВЫБЕРИТЕ дату в Mysql, возвращая неверные данные - PullRequest
0 голосов
/ 28 февраля 2019

Я пытаюсь создать отчет, но он возвращает неверные данные.Я пытаюсь найти информацию между двумя разными датами.

$data1 = '21/02/2019 03:46';
$data2 = '16/08/2019 03:46';

$data1 = DateTime::createFromFormat('d/m/Y H:i', $data1)->format('Y-m-d');
$data2 = DateTime::createFromFormat('d/m/Y H:i', $data2)->format('Y-m-d');

 echo $data1;

$sql = "
SELECT p.pedido_id 
     , p.pedido_status
     , STR_TO_DATE(p.pedido_data,'%d/%m/%Y') as pedido_data
     , l.lista_pedido
     , l.lista_item as item_id
     , l.lista_title as item_title
     , SUM(l.lista_qtde) as total 
  FROM pedido p
  JOIN lista l
    ON lista_pedido = pedido_id 
 WHERE pedido_status = 3 
   AND (pedido_data >= $data1 AND pedido_data <= $data2) 
 GROUP by item_id;
 ";


$query = mysqli_query($conn,$sql);

Когда появляется результат, он также приводит результаты других дат.

Это таблица результатов:

253 Fio de Malha - Marfim   2018-12-08
254 Fio de Malha - Areia    2018-12-07
257 Kit Clutch alça corrente Pérola 2019-02-18
258 Alça corrente Acrílica - Branca 2019-02-18
259 Alça corrente Acrílica - Preta  2019-02-18
261 Alça corrente Acrílica - Goiaba 2019-02-19
262 Alça corrente Acrílica - Vermelha   2019-02-24
263 Alça corrente Acrílica - Marrom 2019-02-26

Буду очень признателен, если кто-нибудь поможет мне решить эту проблему.Я не знаю, где я иду не так.

1 Ответ

0 голосов
/ 01 марта 2019

Ваша проблема в этой части вашего WHERE предложения:

AND (pedido_data >= $data1 AND pedido_data <= $data2) 

Поскольку вы не можете получить доступ к псевдонимам в предложении WHERE, MySQL использует исходное значение столбца даты в этом тесте, ипоэтому сравнение происходит как текст, а не как дата.Вам нужно изменить эту строку на

AND STR_TO_DATE(p.pedido_data,'%d/%m/%Y') BETWEEN '$data1' AND '$data2'

Обратите внимание также на добавление кавычек вокруг значений $data1 и $data2 (в противном случае 2019-02-28 интерпретируется буквально как 1989).

Обратите внимание, что если бы вы назвали свой псевдоним чем-то, отличным от того же имени, что и столбец, вы бы получили сообщение об ошибке MySQL в предложении WHERE при попытке выполнить запрос, который немедленно выявил бы проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...