我有一个用 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/