Mysql 如果计数为null,则返回0

Mysql 如果计数为null,则返回0,mysql,ruby-on-rails,Mysql,Ruby On Rails,资料来源:你有很多评论吗 评论:有很多培训评论吗 @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 = 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")
我想列出带有负面评论计数的来源,但我失去了没有负面评论的来源(training_entries.category_id=2)。我尽了一切努力来实现这一目标。我尝试了left join,我尝试了ifnull,但都没有成功。任何帮助都将不胜感激

我想做什么

源计数

资料来源1 5

资料来源20

资料来源3 13

我得到的是

源计数

资料来源1 5

资料来源3 13

来源表

id: integer
name: string
id: integer
source_id: integer
spam: boolean
id: integer
comment_id: integer
category_id: integer
评论表

id: integer
name: string
id: integer
source_id: integer
spam: boolean
id: integer
comment_id: integer
category_id: integer
培训意见表

id: integer
name: string
id: integer
source_id: integer
spam: boolean
id: integer
comment_id: integer
category_id: integer

得到零是因为没有匹配项时,标准联接不会产生任何结果。您需要获取过去的ActiveRecord;大概是这样的:

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

好的,您必须下拉到SQL才能获得左外部联接。

了解您的数据库结构会很有帮助。有没有办法联接3tables@rOrman:您可以添加另一个
连接
调用(
.joins(:third_table)
),或向上述
连接
调用(
.joins)添加更多SQL('LEFT OUTER…JOIN third_table ON…')
)。@rOrman:最终使用了什么SQL?您应该能够从日志中提取它。