2014-12-02 47 views
0

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

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 

类别记录一个有3桩和录制两个具有后的2 我想算属于类别名称的所有帖子“XXXX”或简单地想要统计属于每个父类别的所有帖子及其子类别。

+0

我不明白的问题,因为它是目前措辞。您可以添加一些示例数据以及您试图获得的结果吗? – Mureinik 2014-12-02 07:29:09

+0

你有一种方法,你已经尝试过吗? – 2014-12-02 07:38:13

+0

不太了解类的关系:1.帖子属于多个类别,而类别也属于多个类别? 2.帖子也有很多类别? – 2014-12-02 08:58:29

回答

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

你好德米特里,我想统计所有的父类别。让给你一些提示一个父类别将有一些子类别,每个子类别是多对多post_category的帖子。我想统计一个孩子记录的所有记录,并将他们与他们的父母相加,这样父母将拥有相同的所有孩子类别的帖子。 – 2014-12-02 08:42:45

+0

这不是用于导轨,而只是一个查询。因为它应该是一个铁轨/友好的记录。 – 2014-12-02 08:47:39

+0

您是否意味着您需要为每个顶级类别计数帖子? – 2014-12-02 09:17:05

0

使用宝石只是尝试这样的方法:

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