MySQL 将多个表(外键)的数据组合成一个数组

标签 mysql sql json subquery

我想要完成的是查询类别表中所有类别的数据,同时添加一个“posts”属性,将该类别中所有帖子的 ID 列出到一个数组中。

数据库表:

'categories' table
+---------+----------+
|      id | title    |
+---------+----------+
|     100 | "categ1" |
|     101 | "categ2" |
|     102 | "categ3" |
|     103 | "categ4" |
+---------+----------+

'posts' table
+---------+----------+----------+
|      id | title    | category |
+---------+----------+----------+
|       1 | "abc"    | 100      |
|       2 | "def"    | 101      |
|       3 | "ghi"    | 100      |
|       4 | "jkl"    | 102      |
+---------+----------+----------+

输出目标:(json_encode,手动将“类别”添加到顶层)

{
    "categories": [
        {
            "id": 100,
            "title": "categ1",
            "posts": [1, 3] (Post IDs of those in category 10)
        }
        {
            "id": 102,
            "title": "categ2",
            "posts": [2]
        }
        {
            "id": 103,
            "title": "categ3",
            "posts": [4]
        }
        {
            "id": 104,
            "title": "categ4",
            "posts": []
        }
    ]
}

虽然获取类别的基本查询很简单,但我无法找到一种根据帖子表和帖子类别/类别 ID 关系生成 posts 属性的方法。

如果有任何不清楚的地方,可以提供更多信息。

最佳答案

如果我正确理解您的问题,听起来您正在寻找 GROUP_CONCAT():

select c.id, c.title, group_concat(p.id) posts
from categories c
  left join posts p on c.id = p.category
group by c.id

关于MySQL 将多个表(外键)的数据组合成一个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22188902/

相关文章:

c# - 将库嵌入我的应用程序并使其使用该库

php - 如何从 MySQL 和 PHP 获取数组字符串

SQL - 我想不出任何方法来做到这一点,我已经完成了所有研究?

MySQL COUNT 函数在多个连接查询中没有像我希望的那样执行

mysql - 如何使用复合键进行内连接

javascript - 使用 Node.js 的服务器端代理

json - 使用jq将多个JSON的一个属性连接到一个文件中

python - 在 Flask 中获取数据 JSON

Mysql高效地以行或列存储动态客户数据

sql - Postgresql ORDER_BY ... COLLATE 不同的值返回相同的输出