2017-03-14 7 views
0

私は販売活動を報告するPHPで書かれたスクリプトを持っています。mysqlから日付で情報を取得

現在、値だけを取得しています。今日の昨日最後の7日間。私はこのようにやりたい

if($x==1) { 
    $sql="SELECT SUM(incasat) FROM tichete WHERE datainchis BETWEEN DATE_ADD(CURDATE(), INTERVAL -1 day) AND CURDATE() AND inchisde='$y'"; 
    $result = mysql_query($sql) or die(mysql_error()); 
    $row = mysql_fetch_assoc($result); 
    if(!empty($row['SUM(incasat)'])) echo $row['SUM(incasat)']; else echo '0'; 
} 

if($x==0) { 
    $sql="SELECT SUM(incasat) FROM tichete WHERE DATE(datainchis) = DATE(NOW()) AND inchisde='$y'"; 
    $result = mysql_query($sql) or die(mysql_error()); 
    $row = mysql_fetch_assoc($result); 
    if(!empty($row['SUM(incasat)'])) echo $row['SUM(incasat)']; else echo '0'; 
} 

フィールド昨日、次のコードを使用する:フィールドの

今日は、次のコードを使用します。今日の昨日のように毎日コレクションを見せてもらいたいのですが、3日前の3日間は3日前から昨日のように見たいと思っています。

コードを囲みます。

function get_user_incasari($x,$y) 
{ // 0 - azi, 1 - ieri, 7 - ultimele 7 zile, 30 - luna asta, 31 - luna trecuta 
    if($x==0) { 
     $sql="SELECT SUM(incasat) FROM tichete WHERE DATE(datainchis) = DATE(NOW()) AND inchisde='$y'"; 
     $result = mysql_query($sql) or die(mysql_error()); 
     $row = mysql_fetch_assoc($result); 
     if(!empty($row['SUM(incasat)'])) echo $row['SUM(incasat)']; else echo '0';   
    } 
    if($x==1) { 
     $sql="SELECT SUM(incasat) FROM tichete WHERE datainchis BETWEEN DATE_ADD(CURDATE(), INTERVAL -1 day) AND CURDATE() AND inchisde='$y'"; 
     $result = mysql_query($sql) or die(mysql_error()); 
     $row = mysql_fetch_assoc($result); 
     if(!empty($row['SUM(incasat)'])) echo $row['SUM(incasat)']; else echo '0'; 
    } 
    if($x==3) { 
     $sql="SELECT SUM(incasat) FROM tichete WHERE datainchis BETWEEN DATE_ADD(CURDATE(), INTERVAL -3 day) AND CURDATE() AND inchisde='$y'"; 
     $result = mysql_query($sql) or die(mysql_error()); 
     $row = mysql_fetch_assoc($result); 
     if(!empty($row['SUM(incasat)'])) echo $row['SUM(incasat)']; else echo '0'; 
    } 
    if($x==7) { 
     $sql="SELECT SUM(incasat) FROM tichete WHERE datainchis BETWEEN DATE_ADD(CURDATE(), INTERVAL -7 day) AND CURDATE() AND inchisde='$y'"; 
     $result = mysql_query($sql) or die(mysql_error()); 
     $row = mysql_fetch_assoc($result); 
     if(!empty($row['SUM(incasat)'])) echo $row['SUM(incasat)']; else echo '0'; 
    } 
    if($x==30) { //luna curenta 
     $sql="SELECT SUM(incasat) FROM tichete WHERE MONTH(datainchis) = MONTH(CURDATE()) AND inchisde='$y'"; 
     $result = mysql_query($sql) or die(mysql_error()); 
     $row = mysql_fetch_assoc($result); 
     if(!empty($row['SUM(incasat)'])) echo $row['SUM(incasat)']; else echo '0';  
    } 
    if($x==31) { //luna precedenta/trecuta 
     $sql="SELECT SUM(incasat) FROM tichete WHERE MONTH(datainchis) = MONTH(CURDATE() - INTERVAL 1 MONTH) AND inchisde='$y'"; 
     $result = mysql_query($sql) or die(mysql_error()); 
     $row = mysql_fetch_assoc($result); 
     if(!empty($row['SUM(incasat)'])) echo $row['SUM(incasat)']; else echo '0';  
    } 
} 
+0

*** [mysql_ *関数の使用をやめる](http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php)*** [これらの拡張機能](http://php.net/manual/en/migration70.removed-exts-sapis.php)はPHP 7で削除されました。[prepared](http://en.wikipedia.org/wiki)について学んでください。/Prepared_statement)ステートメント(PDO)(http://php.net/manual/en/pdo.prepared-statements.php)と[MySQLi](http://php.net/manual/en/mysqli.quickstart。 prepared-statements.php)、PDOの使用を検討してください。[これは本当に簡単です](http://jayblanchard.net/demystifying_php_pdo.html)。 –

答えて

0

あなたは、GROUP BYクエリの日付に切り捨て(ごdatainchis列のような)のタイムスタンプを、使用することができます。それは簡単です。たとえば、8日前に開始し、昨日終了すると、1日ごとに要約が表示されます。 (注意:CURDATE()DATE(NOW())を意味します。)

SELECT SUM(incasat) incasat_total, DATE(datainchis) datainchis 
    FROM tichete 
    WHERE inchisde='$y' 
    AND datainchis >= CURDATE() - INTERVAL 8 DAY 
    AND datainchis < CURDATE() 
    GROUP BY DATE(datainchis) WITH ROLLUP 

通知は、あなたのコードは、エラー(一般的なエラー)が含まれてくださいということ。

あなたはタイムスタンプを持っているとあなたはタイムスタンプが深夜今日を含めへとまで、昨日の深夜で始まるすべての行を取得

datainichis BETWEEN CURDATE() - INTERVAL 1 DAY AND CURDATE() 

を言うなら。今日は真夜中を除外したいと思っています。それらの記録は昨日ではなく、今日のものです。

 datainichis >= CURDATE() - INTERVAL 1 DAY 
AND datainichis < CURDATE() 

お知らせ<=の代わりに<

あなたのコードには非効率性も含まれています。表現

DATE(datainichis) = CURDATE() 

sargableではありません。これは、datainichis列の索引の使用を無効にします。

私はこのトピックについて少しエッセイを書いた、hereです。

関連する問題