最有效的方法是什么?
现在我这样做..
$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;
我知道必须有更好的方法来做到这一点。
让我知道,谢谢!
答案 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()必须重新计算每一行。这样做只会在填充结果本身时一次查询查询结果的行。