首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按日期从mysql获取信息

按日期从mysql获取信息
EN

Stack Overflow用户
提问于 2017-03-14 19:41:00
回答 1查看 42关注 0票数 0

我有一个用PHP编写的脚本,它报告销售活动。

下面是当前正在获取的值。今天昨天已经过去7天了。

今天的字段使用以下代码:

代码语言:javascript
复制
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';
}

字段昨天使用了以下代码:

代码语言:javascript
复制
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天前那样展示每一天的收藏品,但对于3天前,我想看到的是昨天的样子,而不是今天支付的金额。

将代码封装在一起。

代码语言:javascript
复制
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';      
    }
}   
EN

回答 1

Stack Overflow用户

发布于 2017-03-14 19:57:04

您可以在GROUP BY查询中使用截断为date的时间戳(如datainchis列)。很简单。例如,这将按天给出一个摘要,从八天前开始到昨天结束。(注:CURDATE()表示DATE(NOW())。)

代码语言:javascript
复制
 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

请注意,您的代码包含一个错误(一个常见错误)。

如果你有时间戳,你说

代码语言:javascript
复制
 datainichis BETWEEN CURDATE() - INTERVAL 1 DAY AND CURDATE()

您可以获得从昨天午夜开始到今天午夜(包括今天午夜)的所有带有时间戳的行。实际上,您希望排除今天的午夜;这些记录属于今天,而不是昨天。

代码语言:javascript
复制
     datainichis >= CURDATE() - INTERVAL 1 DAY
 AND datainichis <  CURDATE()

请注意<=所在位置的<

您的代码还包含一个低效。表达式

代码语言:javascript
复制
 DATE(datainichis) = CURDATE()

不是sargable。它不支持在datainichis列上使用索引。

我已经写了一篇关于这个主题的小文章,here

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42785020

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档