我想要完成的是查询类别表中所有类别的数据,同时添加一个“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/