【发布时间】:2012-09-25 01:28:08
【问题描述】:
我正在开发基于 PHP/MySQL 的“博客帖子”系统,帖子可以有多个类别,我有 2 个表:
帖子:
PostId Content
0 POST0
1 POST1
2 POST2
3 POST3
post_categories:
PostId CategoryId
0 1
0 2
0 3
1 2
1 4
2 3
3 1
(我省略了一些列)
我还有一个第三个表“类别”,它描述了类别,但这不相关。
给定一个 CategoryId(例如:2),我想返回所有包含该 CategoryId 的帖子,格式如下:
PostId Contents CategoriesIds
0 POST0 1, 2, 3
1 POST1 2, 4
(post 0 和 post 1 都必须返回,它们的 CategoryId 都为 2)
问题在于使用这个查询:
SELECT p.PostId, p.Content, GROUP_CONCAT(pc.CategoryId SEPARATOR ',') AS CategoriesIds
FROM posts AS p
LEFT JOIN post_categories AS pc ON p.PostId=pc.PostId
WHERE pc.CategoryId = 2 GROUP BY p.PostId
两个帖子都返回,但不是所有类别 ID,
PostId Content CategoriesIds
0 POST0 2
1 POST1 2
我想返回所有 CategoryId 为 2 的帖子,但仍返回这些帖子的所有 CategoriesId。
可以吗?
谢谢
【问题讨论】:
标签: mysql left-join where-clause