我正在开发基于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
(我省略了一些栏目)
我还有第3个表“类别”,它们描述了类别,但这并不相关。
给出CategoryId(例如:2),我想在以下表格中返回包含该CategoryId的所有帖子:
PostId Contents CategoriesIds
0 POST0 1, 2, 3
1 POST1 2, 4
(必须返回0和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的帖子,但仍然会返回这些帖子的所有CategoriesIds。
是否可以这样做?
感谢
答案 0 :(得分: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 p.PostId in
( select PostId from post_categories where CategoryId = 2)
GROUP BY p.PostId
答案 1 :(得分:0)
不使用IN
子句的最简单的解决方案是 SQLFiddle Demo