首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用php/雄辩/mysql进行分组和嵌套数组

问使用php/雄辩/mysql进行分组和嵌套数组
EN

Stack Overflow用户
提问于 2017-10-09 11:54:10
回答 1查看 734关注 0票数 3

假设我有一个基于时间的数据集,其中包含如下所示的数据数组:

代码语言:javascript
复制
{
   "group": "a", "date": "2017/01/01", value: 0.01
},
{
   "group": "a", "date": "2017/01/02", value: 0.02
}

如何生成这样的结果集:

代码语言:javascript
复制
{
    "group": "a", value_sum: 0.03, timeline: [["2017/01/01", 0.01], ["2017/01/02", 0.02]]
}

诸若此类。

我正在使用雄辩的ORM,目前我坚持一种模式,在这种模式中,我进行了两个不同的查询,第一个是获得每个不同组的和:

代码语言:javascript
复制
SELECT group, sum(value) FROM table GROUP BY group

还有第二个得到趋势的:

代码语言:javascript
复制
SELECT group, date, sum(value) FROM table GROUP BY group, date

然后,我在php中合并这两个结果集。

我在寻找一种在一个查询中获得所有结果的方法

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-09 12:02:09

您可以尝试使用rollup执行GROUP BY:

代码语言:javascript
复制
SELECT
    `group`, date, sum(value)
FROM table
GROUP BY
    `group`, date
WITH ROLLUP

在拉拉维尔:

代码语言:javascript
复制
DB::table('table')
    ->select('`group`', 'date', DB::raw('sum(value) as sumval'))
    ->groupBy(DB::raw('`group`, date WITH ROLLUP'))
    ->get();

您可以检查MySQL文档,查看rollup组是如何工作的。对于当前的查询结构,rollup将为每个group的值小计生成附加行。此外,在结果集的底部将有一个总计的行。虽然您还可以通过两个单独的查询实现相同的任务,但您可能会发现让MySQL为您完成繁重的工作更容易。毕竟,它就是为了这个目的而创建的。

另一个注意事项:不要将列命名为group,因为这是一个保留的MySQL关键字。另外,不要将表命名为table。也许您只是将这些名称用作占位符,但如果不是,您将不得不在任何地方避开它们。

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

https://stackoverflow.com/questions/46645838

复制
相关文章

相似问题

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