gpt4 book ai didi

mysql - CakePHP 将日期时间转换为日期并对结果进行分组

转载 作者:行者123 更新时间:2023-11-29 12:53:47 24 4
gpt4 key购买 nike

我有一个报告表,我想按创建日期对它们进行分组。每个都有创建的字段,即日期时间。

我尝试这样做:

    $reports = $this->Report->find('all', array(
'recursive' => 0,
'group' => 'DATE(created)'
));

它返回了正确数量的组(3个,因为我有很多记录,但目前只有3个不同的日期),但每个组只返回一个记录。正如 @Kai 所回答的,sql 分组也将返回一个唯一的记录。

我想显示结果表格,并用表格标题分隔每个分组日期的结果。实现这一目标的最佳 CakePHP 方法是什么?

最佳答案

我认为您对 mysql 中的 GROUP BYORDER BY 的概念感到困惑。

分组依据

GROUP BY 仅在某些情况下才有意义。例如,如果您有一个表,其中包含具有类别和价格的产品,并且您想要获取每个类别的最高价格的产品。如果您仅使用SELECT MAX(price) FROM products,您将获得表中最昂贵的产品。这就是 GROUP BY 的用武之地:SELECT MAX(price) FROM products GROUP BY Category_idGROUP BY 将始终为您在 GROUP BY 中指定的列中的每个唯一值获取一行。在我的示例中,这意味着使用 GROUP BY,它将为每个类别 ID 获取一行,因此我将能够看到每个类别的最高价格。

排序方式

ORDER BY 非常不言自明 - 它将按您指定的列对结果进行排序。

所以,回到你的问题,你应该使用 ORDER BY,而不是 GROUP BY

$reports = $this->Report->find('all', array(
'recursive' => 0,
'order' => 'DATE(created)'
));

预计到达时间:至于创建结果表格,每个日期都由表格标题分隔,就像要创建一个没有这些分隔符的常规表格一样,但将日期保存在临时变量的第一行中。每次迭代,根据该行的日期检查临时变量。如果行的日期不同,请插入标题,并将临时变量更新为当前行的日期。这里有一些伪代码可以帮助澄清:

echo '<table>';
//echo your first set of headers.

$temp = $report[0]['Report']['created'];
foreach($data as $report)
{
if($temp != $report['Report']['created'])
{
//echo your headers
$temp = $report['Report']['created'];
}
//echo your row of data here.
}
echo '</table>';

关于mysql - CakePHP 将日期时间转换为日期并对结果进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24390346/

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