【问题标题】:ActiveRecord having count query condition具有计数查询条件的 ActiveRecord
【发布时间】:2021-08-10 13:00:04
【问题描述】:

我有 2 个模型:ConversationMessage 我需要检索属于 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)

但是我收到的对话没有来自两者的消息...请问我做错了什么?

【问题讨论】:

  • 你能分享模型中关系的sn-ps吗?
  • 有人解决了我的问题!

标签: sql ruby-on-rails activerecord


【解决方案1】:

问题在于COUNT 表达式。

请注意,COUNT 计算所有 NON-NULL 值。在您的情况下,您将一些条件表达式放入COUNT,其计算结果为TRUEFALSE,它们不是NULL

最懒惰的解决方案如下所示:

COUNT(messages.authorable_type = 'Influencer' OR NULL)

【讨论】:

    猜你喜欢
    • 2017-09-26
    • 1970-01-01
    • 1970-01-01
    • 2022-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-25
    • 2020-06-20
    相关资源
    最近更新 更多