我正在开发基于 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。
有可能吗?
谢谢
最佳答案
看起来您需要将 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 p.PostId in
( select PostId from post_categories where CategoryId = 2)
GROUP BY p.PostId
关于带有 WHERE 子句的 MySQL JOIN,不返回所有结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12575080/