Farklı gün istatistikleri seçin

4 Cevap php

Bunu yapmanın en etkili yolu nedir?

Şu anda ben bu şekilde yapıyorum ..

$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);

o zaman

print $counttoday;
print $countyesterday;

Bunu yapmak için daha iyi bir yolu olmalı sahip olduğunu biliyorum.

Bana haber ver, teşekkürler!

4 Cevap

Bu yapmak için çalışıyoruz ne yapmak mutlak bir iyi bir yolu olup olmadığını bilmiyorum, ama sen bir sorgu tarafından döndürülen satır sayısını saymak için () MySQL deyimi SAYISININ kullanabilirsiniz.

Örneğin, yazma Yani

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

Will return a 1x1 table of results with the number of rows in the query. Then you can use

$counttoday = mysql_result($today, 0);

sayısını almak için.

Herhalde kendi işlevini tanımlamak sürece, bir işlev çağrısı ile bunu yapmak için daha hızlı bir yol olarak orada görünmüyor. Ama ilk sorgudan çok büyük bir sonuç için, ben () ayrı ayrı tekrar tekrar her satır saymak zorundadır mysql_num_rows varsayalım beri bu hızlı olduğunu hayal ediyorum. Sonuç kendisi doldurulur edilirken bu şekilde yaparak sadece bir kez sorgu sonucu satır üzerinde gider.

Bu işe mıydı?

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

dün m / d / Y ise nedenle bugün Y-m-d!

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

Tablodaki calldate tarih veya tarih saat olmalıdır. Sonra sadece kullanabilirsiniz

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

Bunu dünün veya bugünün saymak olmadığını öğrenmek için $ yesterdaydate için calldate karşılaştırabilirsiniz.

Diğer cevaplar bahsetmiyorlar yana, aslında gibi pek, tek bir sorguda yapılabilir:

$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')");

Bu ilk sütundaki bugün için sayısı ve ikinci sütunda dün için sayısını döndürür.

calldate zaten DATE alan ise, DATE() döküm kapalı bırakabilirsiniz; bu gerçeği performansını geliştirebilmektedir.