繁体   English   中英

获取给定日期范围和按日期分组的最大值PHP MYSQL

[英]Get max value of given date range and group by day PHP MYSQL

我对此有很多麻烦。 我正在尝试在给定范围的情况下每天获取最大值。 但是,加载查询结果时,我在count列中始终获得空白值。

<?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
                          );
?>

我建议您对上述查询使用PDO。您的问题尚不完全清楚,但是如果您打算检索最大值的数据库结果,则可以执行以下方法。

$sql='SELECT * FROM testLocation 
                      WHERE orderDate 
                      BETWEEN '$data1%' AND '$data2%' ORDER BY orderDate
                      DESC LIMIT 1';

通过此查询,我们将检索到的数据限制为1,这就是为什么您在此处仅获得最大值并标记我们已按降序对数据进行排序的原因。

这里要注意几件事。

首先, %在你的日期常量标志不应该存在。 这些仅与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编程不是一个好的选择。 这是不安全的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM