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?您应该能够从日志中提取它。