【发布时间】:2020-11-18 20:11:40
【问题描述】:
我想获取我数据库中的所有帖子并返回它们,按日期分组(年 -> 月 -> 日 -> 当天的帖子)。
我目前的数据库结构:
ID, author, title, content, created_at
可能的值可以是:
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
我想要实现的是,获取所有这些帖子,但按日期(年、月、日)对它们进行分组。 即:
[2020] => [
[7] => [
[27] => [
[ID] => 1,
[ID] => 2,
],
[28] => [
[ID] => 3,
]
]
]
到目前为止我尝试过的:
SELECT id FROM my_posts_table WHERE author = 1 GROUP BY created_at ORDER BY created_at ASC
与
SELECT 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
我的预期结果将是我想要实现的上述示例。但我实际上得到的是:
[0] => [
[ID] => 1,
[year] => 2020,
[month] => 7,
[day] => 27
],
[1] => [
[ID] => 3,
[year] => 2020,
[month] => 7,
[day] => 28
]
此时我完全糊涂了,因为我认为“GROUP BY”按预期工作,但它似乎以不同的方式工作。
你们能指出我正确的方向吗?我希望很清楚我想要达到的目标。 但如果不是,这里又是:“我想从 my_posts_table 中获取 author_id = 1 的所有帖子,并按年 -> 月 -> 日 -> 帖子返回”,所以“27”天的每个帖子都应该在 [27] 键下..
编辑:我按要求创建了SQLFiddle
【问题讨论】:
-
添加示例小提琴(或至少 CREATE TABLE + INSERT INTO 带有示例数据的脚本)并为此数据显示所需的输出(MySQL 输出!!!不是它在应用程序端的 JSON 表示)。跨度>
-
让我们说如果你能得到你想要的输出,你打算用它做什么?导出到电子表格(xls、xml 等)或在网页中显示?或者..?
-
@tcadidot0 这就是这个问题的目的。正确获取 MySQL 查询。如何在页面上显示它很容易。只是得到想要的结果是我一直在努力实现的目标
-
这对于 SQL 查询来说并不是真正的工作。 SQL 查询不返回“嵌套数组”,它们返回all 具有相同结构的记录。构建您想要的数据结构是在您从数据库中查询数据之后需要进行的处理,无论您使用哪种编程语言来进一步处理/处理此结果。
-
您所显示的结果是不可能的,顺便说一句。 (假设它应该是一个 PHP 数组或类似的东西。)你不能在 2020 -> 7 -> 27 下拥有密钥
IDtwice。
标签: mysql sql arrays json database