[英]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.