MYSQL获取按日期分组的所有帖子

MYSQL获取按日期分组的所有帖子,mysql,sql,arrays,json,database,Mysql,Sql,Arrays,Json,Database,我想获取数据库中的所有帖子,并将它们返回,按日期分组(年->月->日->当天的帖子) 我当前的数据库结构: ID、作者、标题、内容、创建地点 可能的值可以是: 1, 1, "hello world", "This is the content", "2020-07-27 09:15:57" 2, 1, "Another post", "Another post content", "20

我想获取数据库中的所有帖子,并将它们返回,按日期分组(年->月->日->当天的帖子)

我当前的数据库结构:

ID、作者、标题、内容、创建地点

可能的值可以是:

1, 1, "hello world", "This is the content", "2020-07-27 09:15:57"
2, 1, "Another post", "Another post content", "2020-07-27 11:09:55"
3, 1, "Third post", "No content", "2020-07-28 08:15:20"
...etc
我想实现的是,获得所有这些帖子,但按日期(年、月、日)分组。 i、 e:

到目前为止,我所尝试的:

从my_posts_表中选择id,其中author=1 groupby created_at ORDER BY created_at ASC

从my_posts_表中选择id、年(创建时)为年、月(创建时)为月、日(创建时)为日,其中author=1按年、月、日分组,按年、月、日排序ASC

我的预期结果将是我想要实现的上述例子。但实际上我得到的是:

[0] => [
   [ID] => 1,
   [year] => 2020,
   [month] => 7,
   [day] => 27
],
[1] => [
   [ID] => 3,
   [year] => 2020,
   [month] => 7,
   [day] => 28
]
我现在完全糊涂了,因为我认为“分组方式”是按照我的预期工作的,但它似乎以不同的方式工作

你们能给我指一下正确的方向吗?我希望我的目标是明确的。 但如果不是这样,那又是这样:“我想从我的_posts_表中获取所有帖子,其中author_id=1,并按年份->月份->日期->帖子返回”,因此“27”天的所有帖子都应该在[27]键下

编辑:我按要求使用了

对于SQLFIDLE示例,请尝试以下方法:

SELECT GROUP_CONCAT(id), 
YEAR(created_at) as year, MONTH(created_at) as month, DAY(created_at) as day 
FROM my_posts_table 
WHERE author = 1 
GROUP BY year, month, day ORDER BY year, month, day ASC

数据库查询始终返回由行和列组成的“平面”结果集。如果您想要一个嵌套的数据结构,那么一种方法是编写一个标量查询,它只返回一行和一列,其中包含一个JSON对象

这将涉及多个级别的聚合,以及JSON函数
JSON_ARRAYAGG()
JSON_OBJECT()


添加示例fiddle(或者至少创建TABLE+INSERT到包含示例数据的脚本中)并显示此数据的所需输出(MySQL输出!!!而不是应用程序端的JSON表示)。比如说,如果您能够准确地获得所需的输出,您将如何处理它?导出到speadsheet(xls、xml等)或在网页中显示?还是@这就是这个问题的目的。获取正确的MySQL查询。如何在页面上显示它非常简单。仅仅获得所需的结果是我一直在努力实现的事情。这对于SQL查询来说并不是一项真正的工作。SQL查询不返回“嵌套数组”,它们返回所有具有相同结构的记录。构建所需的数据结构是在查询数据库中的数据后需要进行的处理,无论您使用何种编程语言来进一步处理该结果。顺便说一句,您所显示的所需结果是不可能的(假设是PHP数组或类似的东西)您不能在2020->7->27下使用键
ID
两次。
SELECT GROUP_CONCAT(id), 
YEAR(created_at) as year, MONTH(created_at) as month, DAY(created_at) as day 
FROM my_posts_table 
WHERE author = 1 
GROUP BY year, month, day ORDER BY year, month, day ASC
select json_object(created_year, json_arrayagg(obj)) obj
from (
    select 
        created_year, 
        json_object(created_month, json_arrayagg(obj)) obj      
    from (
        select 
            year(created_at)  created_year,
            month(created_at) created_month, 
            json_object(day(created_at), json_arrayagg(id)) obj
        from my_post_table
        group by year(created_at), month(created_at), day(created_at)
    ) t
    group by created_year, created_month
) t