2016-04-30 82 views
0

我对此有太多的麻烦。我试图在给定范围内每天获得最大值。但是当我加载查询结果时,我在count列中不断得到一个空值。获取给定日期范围的最大值并逐日进行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 
         ); 
?> 
+0

查询看起来很好。必须是你如何阅读结果 –

+0

只是一个快速提示:mysql_ *函数已弃用,不应再使用。而是使用mysqli_ * Funktions或PDO对象。 – Marcel

+0

当我查询所有的值时,结果显示正常,但是当我这样做时,新的查询没有显示。 – amiao

回答

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编程的好选择;这是不安全的。

0

我建议你,请使用PDO针对上述问题queries.Your不完全清楚,但如果你打算检索它的值是最大的,你可以做以下途径数据库的结果。

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

通过这个查询,我们限制了检索的数据为1,这就是为什么你会在这里得到的只是最大值和标记,我们已经下令降序方式的数据。