我试图生成一个报告,但它返回了不正确的数据。我想在两个不同的日期之间搜索信息。
$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
如果有人能帮我解决这个问题,我将不胜感激。我不知道我错在哪里。
最佳答案
你的问题在于你的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)。注意,如果将别名命名为与列不同的名称,则在尝试执行查询时,会在
WHERE
子句上收到MySQL错误消息,这将立即显示问题。关于php - MySQL中的SELECT日期返回错误的数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54933265/