gpt4 book ai didi

php - 基于 mySQL 中的 DATE() 运行 1 个查询而不是 14 个

转载 作者:行者123 更新时间:2023-11-29 12:44:26 25 4
gpt4 key购买 nike

这是我目前正在做的事情,我认为在我的服务器上使用了不必要的资源:

public function getDailyAverage($days) {
global $db;
$db->connect();
$sql = $db->myRawQuery("
SELECT
sum(`amount`) AS `total_earnings`
FROM
`earnings`
WHERE
`user_id` = '".$_SESSION['userid']."'
AND
DATE(`date`) = DATE(DATE_SUB(NOW(), INTERVAL ".$days." DAY))
");
$db->disconnect();
return (isset($sql[0]['total_earnings']) ? number_format($sql[0]['total_earnings'],2) : number_format(0,2));
}

public function getGraphData() {
$day = 14;
$data = array();
do {
array_push($data, $this->getDailyAverage($day));
--$day;
} while ($day > 0);
return (count($data) > 0 ? implode(', ', $data) : array());
}

显然,我对 $class->getGraphData() 进行了一次调用,但随后它以不同的日期间隔运行相同的查询 14 次,mySQL 中是否有任何解决方案意味着我可以只返回所有结果一次吗?

更新

这是我尝试过的查询,它返回错误

SELECT
SUM(`amount`) AS `total_earnings`, DATE_SUB(`date`, CUR_DATE()) AS `interval`
FROM
`earnings`
WHERE
`user_id` = '66'
AND
`date` >= CURRENT_DATE() - INTERVAL 14 DAY

我抛出的错误是

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'CUR_DATE()) AS interval FROM `earnings` WHERE `user_id` = '66' ' at line 2 

最佳答案

选择间隔作为字段列表的一部分:

SELECT ..., DATE_SUB(`date`, CUR_DATE()) AS interval
...
WHERE `date` >= CUR_DATE() - INTERVAL 14 days

这仍然会为您提供 14 天的记录,以及一个指示记录属于哪一天的新字段。然后你的获取代码可以做一些简单的事情,比如:

while ($row = fech_db_row($result)) {
$data[$row['interval']][] = $row;
}

这样你就得到了一个很好的数组,该数组以记录的“旧”程度为键。

关于php - 基于 mySQL 中的 DATE() 运行 1 个查询而不是 14 个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25647724/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com