如果为空计数则返回0

时间:2011-07-16 22:11:32

标签: mysql ruby-on-rails

来源:has_many评论

评论:has_many training_comments

@negative_comments = Source.joins(:comments => [:training_comments]).where("training_comments.category_id = ? and comments.spam = ?", 2, false).select("sources.*, count(comments.id) as ncount").group("comments.source_id")

我想列出其负面评论数量的来源,但我遗失了没有negative_comments的来源(training_entries.category_id = 2)。我尝试了一切来实现这一目标。我试过左连接,我试过ifnull但没有一个工作。任何帮助都会非常感激..

我正在尝试做什么

  

来源计数

     

source1 5

     

source2 0

     

source3 13

我得到的是

  

来源计数

     

source1 5

     

source3 13

来源表

id: integer
name: string

评论表

id: integer
source_id: integer
spam: boolean

Training_comments表

id: integer
comment_id: integer
category_id: integer

1 个答案:

答案 0 :(得分:0)

你得到零,因为标准JOIN在没有匹配时不会产生任何结果。你需要获得LEFT OUTER JOIN过去的ActiveRecord;像这样的东西:

joins('LEFT OUTER JOIN comments ON comments.source_id = sources.id')

AFAIK,您必须下拉到SQL以获得LEFT OUTER JOIN。