2010-04-08 25 views
1

這樣做的最有效方法是什麼?選擇不同日期的統計信息

現在我做這種方式..

$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

您是否只需要mysql_num_rows()的值或者是否可以提取所有這些記錄? – VolkerK 2010-04-08 10:09:03

回答

-1

我不知道這是一個絕對的更好的方式做你想要做什麼,而是你可以使用MySQL聲明COUNT()計算查詢返回的行數。

因此,例如,寫

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

會返回結果的一個1x1表查詢的行數。 然後你可以使用

$counttoday = mysql_result($today, 0); 

來獲取計數。

似乎沒有更快的方法來做到這一點與一個函數調用,除非你定義自己的函數,我想。但是,對於初始查詢的一個非常大的結果,我想這會更快,因爲我認爲mysql_num_rows()必須重新統計每行。這樣做只會在查詢結果本身被填充時才查詢一次查詢結果的行。

0

wouldnt this work?

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

爲什麼今天Y-m-d昨天是m/d/Y?

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

在表中應該是日期或日期時間。然後,你可以簡單地使用

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

您可以比較calldate至$ yesterdaydate,以找出是否是昨天還是今天的數。

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()轉換;這實際上會改善性能。