2012-04-16 111 views
0

我有了幾個行的數據收集這樣的數據庫:如何彙總行內的PHP特定日期範圍/ MySQL的

Username: BillyBob 
TotalPrice: 19.99 
CreationDate: 2012-02-20 14:30:58 

我需要做一個SQL語句中的PHP做這樣的事情。

$sql = mysql_query(" Add up Total Price Where Username='BillyBob' Where CreationDate is within this month "); 

我該怎麼做這樣的事情。我也想做一些事情,比如過去30天,上週,具體日期範圍等。

這可能嗎?

+1

您應該放棄陳舊的'mysql_'功能並切換到參數化查詢,例如PDO。 – webbiedave 2012-04-16 15:37:34

+0

我不確定我的webhost是否支持PDO – Talon 2012-04-16 15:38:39

+0

如果他們支持PHP 5.1或更高版本,那麼他們支持PDO。 – webbiedave 2012-04-16 16:35:28

回答

2

只需要添加處理錯誤和輸入(收益總額爲給定的月份),你只需要改變與任何時期monthStart和monthEnd邏輯/值你有興趣。

//Parameters for query 
$month = '2012-02'; 
$username = 'BillyBob'; 

//Make date start and end 
$monthStart = $month.'-01 00:00:00'; 
$monthEnd = $month.'-'.date('t', strtotime($monthStart)).' 23:59:59'; 

//Make the query 
$query = sprintf(" 
    SELECT SUM(TotalPrice) 
    WHERE Username = '%s' 
    AND CreationDate >= '%s' 
    AND CreationDate <= '%s'", 
    mysql_real_escape_string($username), 
    mysql_real_escape_string($monthStart), 
    mysql_real_escape_string($monthEnd) 
); 

$result = mysql_query($query); 

if ($result) { 
    if (mysql_num_rows($result) == 1) { 
     //Output/process number e.g.: 
     list($total) = mysql_fetch_num($result); 
     echo 'Total for '.$username.' from '.date('l, jS F Y', strtotime($monthStart)).' to '.date('l, jS F Y', strtotime($monthEnd)).' = &pound;'.number_format($total, 2); 
    } else { 
     //error handling 
    } 
} else { 
    //error handling 
} 
0

我應用到你的數據庫結構

大概會喜歡選擇*,SUM(totalPrice)的東西倒是嘗試這樣的事情(未經測試):

$sql = mysql_query("SELECT SUM(TotalPrice) FROM myTable WHERE Username = 'BillyBob' AND CreationDate BETWEEN CURDATE() - INTERVAL 30 DAY AND CURDATE()");