我遇到这么多麻烦。我试图在给定范围的情况下获得每天的最大值。但是当我加载查询结果时,我的计数列中仍然会出现空白值。
<?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
);
?>
答案 0 :(得分:0)
我建议您使用PDO进行上述查询。您的问题并不完全清楚,但如果您打算检索其值最大的数据库结果,您可以采取以下方式。
$sql='SELECT * FROM testLocation
WHERE orderDate
BETWEEN '$data1%' AND '$data2%' ORDER BY orderDate
DESC LIMIT 1';
通过此查询,我们将检索到的数据限制为1,这就是为什么您只获得此处的最大值并标记我们已按降序排序数据。
答案 1 :(得分:0)
这里要看几件事。
首先,日期常量中的%
符号不应该存在。这些仅适用于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编程的好选择;这是不安全的。