如何在PHP/MySQL中对某个日期范围内的行求和

如何在PHP/MySQL中对某个日期范围内的行求和,php,mysql,Php,Mysql,我有一个数据库,其中包含多行数据,如下所示: Username: BillyBob TotalPrice: 19.99 CreationDate: 2012-02-20 14:30:58 我需要用PHP做一个SQL语句,它可以做这样的事情 $sql = mysql_query(" Add up Total Price Where Username='BillyBob' Where CreationDate is within this month "); 我该怎么做那样的事。我还想做一些事情

我有一个数据库,其中包含多行数据,如下所示:

Username: BillyBob
TotalPrice: 19.99
CreationDate: 2012-02-20 14:30:58
我需要用PHP做一个SQL语句,它可以做这样的事情

$sql = mysql_query(" Add up Total Price Where Username='BillyBob' Where CreationDate is within this month ");
我该怎么做那样的事。我还想做一些事情,比如,最近30天,上周,具体日期范围等

可能吗?

您可以使用mysql sum。请参见此处并应用于您的数据库结构


可能是来自tbl的Select*、sum(totalPrice)之类的内容,其中Username='BillyBob'和CreationDate我会尝试这样的内容(未经测试):


只需添加对错误和输入的处理(返回给定月份的总数),您只需使用您感兴趣的时间段更改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
}
//用于查询的参数
$month='2012-02';
$username='BillyBob';
//使日期开始和结束
$monthStart=$month'-01 00:00:00';
$monthEnd=$month.'-'.date('t',strottime('monthStart))。'23:59:59';
//提出质询
$query=sprintf(“
选择总和(总价)
其中用户名=“%s”
和CreationDate>='%s'

CreationDate您应该放弃过时的
mysql\uuz
函数,转而使用参数化查询,例如PDO。我不确定我的Web主机是否支持PDO。如果它们支持PHP5.1或更高版本,那么它们就支持PDO。
//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
}