我有两个模型:Conversation
和Message
我需要检索属于Brand
的所有对话,其中至少有一条来自品牌的消息和一条来自影响者的消息
这是我的查询:
Conversation.includes(:messages)
.joins(:messages)
.group("conversations.id, messages.id")
.where("conversations.brand_id = ?", brand_id)
.having("COUNT(messages.authorable_type = 'Influencer') > 0 AND COUNT(messages.authorable_type = 'BrandMember') > 0")
.limit(10)
但是我得到的对话没有来自双方的消息…请问我做错了什么?
问题出在COUNT
表达式。
注意COUNT
计数所有NON-NULL值。在您的情况下,您将COUNT
的一些条件表达式计算为TRUE
或FALSE
,而不是NULL
。
最懒的解决方案是这样的:
COUNT(messages.authorable_type = 'Influencer' OR NULL)