选择不同日期的统计数据

时间:2010-04-08 10:01:58

标签: php mysql

最有效的方法是什么?

现在我这样做..

$m= date("m");
$de= date("d");
$y= date("Y");
$userid = $_SESSION['user_id'];
//today
$date = date("Y-m-d");
$today = mysql_query("SELECT * 
                      FROM cdr 
                      WHERE accountcode = '$userid' 
                        AND calldate LIKE '$date%'") or die(mysql_error());
$counttoday = mysql_num_rows($today);
//yesterday
$yesterdaydate = date('m/d/Y', mktime(0,0,0,$m,($de-1),$y));
$yesterday = mysql_query("SELECT * 
                          FROM cdr 
                          WHERE accountcode = '$userid' 
                            AND calldate LIKE '$yesterdaydate%'") or die(mysql_error());
$countyesterday = mysql_num_rows($yesterday);

然后

print $counttoday;
print $countyesterday;

我知道必须有更好的方法来做到这一点。

让我知道,谢谢!

4 个答案:

答案 0 :(得分:0)

这不会起作用吗?

SELECT calldate, COUNT(calldate) FROM cdr WHERE accountcode = '$userid' AND (calldate LIKE '$today%' OR calldate LIKE '$yesterday%')

答案 1 :(得分:0)

为什么今天Y-m-d而昨天是m / d / Y?

$yesterdaydate = date('Y-m-d', strtotime('-1 day')); 

表中的calldate应该是date或datetime。然后你可以简单地使用

SELECT DATE_FORMAT(calldate, '%Y-%m-%d') `calldate`, COUNT(calldate) `count` FROM cdr WHERE accountcode = '$userid' AND calldate >= '$yesterdaydate' group by calldate 

您可以将calldate与$ todaydate进行比较,以确定它是昨天还是今天。

答案 2 :(得分:0)

由于其他答案没有提到它,它实际上可以在一个查询中完成,如下所示:

$today = date('Y-m-d');
$yesterday = date('Y-m-d', strtotime('yesterday'));

$mysql_query("SELECT COUNT(DATE(`calldate`) = '$today') `today`, 
    COUNT(DATE(`calldate`) = '$yesterday') `yesterday`
    FROM `cdr`
    WHERE `accountcode` = '$userid' 
        AND DATE(`calldate`) IN ('$today', '$yesterday')");

这将返回第一列中今天的计数和第二列中昨天的计数。

如果calldate已经是DATE字段,您可以取消DATE()演员表;这样可以提高性能。

答案 3 :(得分:-1)

我不知道这是否是一个绝对更好的方法来做你想做的事情,但你可以使用MySQL语句COUNT()来计算查询返回的行数。

例如,写作

SELECT COUNT(*) 
FROM cdr 
WHERE accountcode = '$userid' 
AND calldate LIKE '$date%'

将返回带有查询中行数的1x1结果表。 然后你可以使用

$counttoday = mysql_result($today, 0);

获取计数。

使用一个函数调用似乎没有更快的方法来执行此操作,除非您定义自己的函数,我想。但是对于初始查询的非常大的结果,我想这会更快,因为我假设mysql_num_rows()必须重新计算每一行。这样做只会在填充结果本身时一次查询查询结果的行。

相关问题