php - 获取给定日期范围的最大值并按天分组 PHP MYSQL

标签 php mysql

我在这方面遇到了很多麻烦。我试图在给定范围内获得每天的最大值。但当我加载查询结果时,我的计数列中始终出现空白值。

<?php

include("dbconnect.php");   

$link=Connection();


$data1 = '2016-04-29 00:00:00';
$data2 = '2016-05-02 00:00:00';



$result = mysql_query(
                          "
                          SELECT DATE(orderDate), MAX(Count)
                          FROM testLocation 
                          WHERE orderDate 
                          BETWEEN '$data1%' AND '$data2%'
                          GROUP BY DATE(orderDate)
                          "
                          ,$link
                          );
?>

最佳答案

这里有一些需要注意的事情。

首先,日期常量中的 % 符号不应该出现。这些仅适用于 LIKE 运算符。

其次,BETWEEN 运算符对于 DATETIME 值效果不佳,因为它等效于:

     WHERE orderDate >= '$data1'
       AND orderDate <= '$data2'  -- wrong!

这排除了结束日期午夜之后的所有内容。 <=DATETIME 的比较是错误的。

你应该使用这个:

     WHERE orderDate >= '$data1'
       AND orderDate <  '$data2' + INTERVAL 1 DAY

它包括您给出的结束日期之后当天午夜 < 之前的所有内容,但不包括该日期。这意味着它将包含日期范围最后一天的所有内容,这可能就是您想要的。

第三,我建议您为结果集中的列指定别名列名称。这将使 php 代码更容易检索它们。

               SELECT DATE(orderDate) orderDate, 
                      MAX(Count) maxCount
                FROM testLocation 
               WHERE orderDate >= '$data1'
                 AND orderDate <  '$data2' + INTERVAL 1 DAY
               GROUP BY DATE(orderDate)

第四,如果您的 testLocation 表中根本没有特定日期的记录,则此查询的结果集将忽略该日期。

第五(其他人在评论中提到了这一点)mysql_ API 对于您的 php 编程来说不是一个好的选择;这是不安全的。

关于php - 获取给定日期范围的最大值并按天分组 PHP MYSQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36954121/

相关文章:

php - 查询 ci 的 mySQL 表中有 JSON 列的位置

MySQL内部查询与cakephp中的Where和Group by条件

php - Windows 上的 PHP CLI 选项

php - 数据库-表设计与查询

php - 网站发现SQL注入(inject)漏洞

php - URL 路由 Codeigniter 中的数据范围

mysql - SQL反向搜索产品和折扣

php - 用php查询mysql中的两个表困难

mysql - GROUP BY 日期范围

php - 如何序列化依赖于 guzzle 6 客户端的对象?