gpt4 book ai didi

php - 如何循环并显示按日期分组的 MYSQL 查询结果?

转载 作者:行者123 更新时间:2023-11-29 10:29:49 34 4
gpt4 key购买 nike

我有一个名为pools的表,其中每个条目都有一个poolid和一个createddate。我正在为自己制作一种仪表板,我想在其中查看过去一周每天创建的池数量的列表(包括“今天到目前为止”)。

我已经到这里了,但是这只是“8”,这实际上是今天到目前为止创建的池的数量,但是我如何检索昨天、2天前、3天前等的池数量?

    $today= date('Y-m-d');
$weekago=date('Y-m-d', strtotime('-1 week'));

$stmt = $pdo->prepare("SELECT COUNT(*), poolid FROM pools WHERE `createddate` BETWEEN :weekago AND :today GROUP BY createddate ORDER BY createddate DESC");
$stmt->execute([':weekago' => $weekago, ':today' => $today]);
foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $row) {
$numpoolssofartoday= $stmt->rowCount();
}

echo $numpoolssofartoday;

调整并得到以下内容来完成我想要的操作:

$stmt = $pdo->prepare("SELECT COUNT(*) as numpools, createddate FROM pools WHERE `createddate` BETWEEN :weekago AND :today GROUP BY createddate ORDER BY createddate DESC");  
$stmt->execute([':weekago' => $weekago, ':today' => $today]);
foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $row) {
$numpoolspastweek .= date('m-d',strtotime($row['createddate'])) . " " . $row['numpools']. "<br>";
}

输出:

12-02 11
12-01 24
11-30 16
11-29 17
11-28 22
11-27 22
11-26 16
11-25 17

最佳答案

你的问题是你的输出写得太过了:

foreach ($stmt->fetchAll(PDO::FETCH_ASSOC) as $row) {
$numpoolssofartoday= $stmt->rowCount();
}
echo $numpoolssofartoday;

你现在看到了吗? $numpoolssofartoday 应该是一个计数数组。或者至少你应该从循环内输出,具体取决于你想要做什么。 (例如测试)。

您还可以使用rowCount来计算查询的所有返回行。而不是使用查询返回的计数。

因此,我会更改您的 SQL,以便更轻松地获取总数,并添加日期,poolid 无关紧要,因为它不正确,因为您将多行与 GROUP BY 子句如此

$sql = 'SELECT createddate, COUNT(poolid) AS total FROM ...';

// I'm to lazy for that looping, and been coding to much so I like to type as little as possible.

$stmt->fetchAll(PDO::FETCH_GROUP);

此外,我会使用Fetch Group,第一列是您分组所依据的数据,这样您就可以获得这样的数组,并且可以跳过循环。

[
'2017-12-3' => ['total' => '3'],
'2017-12-2' => ['total' => '5']
]

关于php - 如何循环并显示按日期分组的 MYSQL 查询结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47615385/

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