sql自我加入和多对多的关系

时间:2014-12-02 07:26:18

标签: mysql sql ruby-on-rails database

我有一个叫做类别的表格,一个记录可以有一个父母或一个孩子和这个类别。类别表是通过post_category与帖子的多对多关系。

category[id, name category_id]

posts[id,title, body....]

post_cats[id,post_id,category_id]

示例数据

category
id    name     category_id
1     xxxx      0
2     yyyy      0
3     ZZZZ      1
4     WWWW      1
5     AAAA      2
6     BBBB      2



posts
id    title              body
1     aaaaaaaaaa
2     bbbbbbbbbbbbbb
3     ccccccccccccccc
4     ddddddddddd

post_cats
id  post_id       category_id
1    1                 3
2    1                 4
3    2                 5
4    2                 6
5    2                 3

类别记录1的帖子为3,记录2的帖子为2 我想计算属于类别名称'xxxx'的所有帖子,或者只是想计算属于每个父类别的所有帖子,并计算其子类别。

2 个答案:

答案 0 :(得分:0)

select post_id
from   post_category
group by post_id 
having count(*) = (select count(*) from category)

答案 1 :(得分:0)

只需使用 gem:

尝试此方案
class ParentCategory < ...
   has_many :categories

   scope :posts, -> do 
      Post.joins(:categories)
          .where(Post.arel_table[:id].eq(Category.arel_table[:post_id])
            .and(Category.arel_table[:parent_category_id].eq(arel_table[:id])))
   end
end