php - 按日期从 mysql 获取信息

标签 php mysql

我有一个用 PHP 编写的脚本,用于报告销售事件。

以下当前仅获取值。今天 昨天 过去 7 天。

今天在字段中使用以下代码:

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';  
}

我想做这样的事情。我希望我可以像今天、昨天、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';      
    }
}   

最佳答案

您可以在 GROUP BY 查询中使用截断为日期的时间戳(例如您的 datainchis 列)。这很容易。例如,这会为您提供从八天前开始到昨天结束的按天的摘要。 (注: 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 .

关于php - 按日期从 mysql 获取信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42785020/

相关文章:

php - fatal error : Uncaught exception 'Zend_Db_Table_Exception'

php 字符串到 Swift 4 中的数字

php - 在MySQL中对具有相同列值的多行的值求和

mysql - 查询缓存不起作用

php - 构建 MySQL 数据库

php - angularJS $http.get() 对复杂 JSON 输出的请求

javascript - php html 输入文本字段

php - wp_ajax_nopriv 不工作 WordPress

php - ajax 请求图像闪烁

html - 使用 HTML 属性作为 MySQL 变量