2016-04-30 79 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,這就是爲什麼你會在這裏得到的只是最大值和標記,我們已經下令降序方式的數據。