【问题标题】:SQL / RoR ActiveRecord Aggregation Querying Through has_many RelationshipSQL/RoR ActiveRecord聚合查询通过has_many关系
【发布时间】:2018-11-07 17:00:04
【问题描述】:

考虑以下几点:

  1. 家庭有_many 个孩子(家庭 1:many Kid)
  2. Kid 有一个枚举属性 age_group,可以是婴儿、儿童、青少年或成人

我想创建几个范围:

  1. 选择所有有孩子的家庭只有age_group: baby。这意味着如果一个家庭有一个婴儿和一个孩子,那么这个家庭不应该符合这个范围。

  2. 选择所有有婴儿和孩子但没有青少年或成人的家庭。

其他范围是 age_group ONLY 儿童、青少年、成人等,但我相信我可以按照与第一个范围相同的逻辑来创建它。

【问题讨论】:

    标签: mysql sql join activerecord


    【解决方案1】:

    我最终想出了这样的东西......

    Family.find_by_sql("SELECT * FROM kids WHERE NOT EXISTS ( SELECT NULL FROM kids WHERE kids.family_id = family.id AND family.age_group != 'baby')")
    

    在我有限的测试数据中,这似乎涵盖了所有只有婴儿的家庭。但是,我没有对此进行广泛测试,因为它不可扩展。由于我必须使用find_by_sql,因此我无法将其与其他调用或添加分页的活动记录链接。

    我决定采取另一条路线,并在家庭中创建一个family_stage 列,并且任何时候更新或添加孩子到家庭以更新family_stage。它使查询一切变得更加简单,并将处理放在更新方面。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-19
      • 2016-05-29
      • 1970-01-01
      相关资源
      最近更新 更多