【问题标题】:selecting by count with one to many relathionship通过一对多关系按计数选择
【发布时间】:2016-02-03 15:52:24
【问题描述】:

所以我确实有用户模型和购物车模型。很明显

User has_many :carts

我打算只选择具有特定购物车数量的用户。 我真的很想在纯 rails-like-sql 中使用它,所以我从这个开始:

User.joins(:carts).group(:id).count

这给了我一个包含几乎所有我需要的信息(用户 ID 和多少购物车)的哈希值。但是我不想通过这个哈希再次浏览,还有另一种聪明而干净的方法吗?

基本上我希望得到一个ActiveRecord::Relation 与拥有超过 3 个购物车的用户

【问题讨论】:

  • 预期的输出是什么,哈希有什么问题?
  • 预期输出是 ActiveRecord::Relation 与拥有 3 个以上购物车的用户的关系。哈希唯一的问题不是那样;]

标签: mysql sql ruby-on-rails join


【解决方案1】:

要向拥有更多用户的 AR 返回 AR,您将使用 having 子句:

User.joins(:carts).group('users.id').having('count(carts.id) > 3')

【讨论】:

  • 好吧,我测试了它,结果不正确(从某种意义上说,我知道我有超过 1 个这样的用户),我要仔细研究一下“拥有”
  • @Leo,您可能会为每个购物车获得一个用户。尝试在末尾添加.uniq,这将为您的 SQL 添加一个 DISTINCT。
  • 一百多个。其实这很奇怪,因为无论我把哪个数字放在“3”的地方,结果总是一样的
  • 您不需要group 子句吗?在 PostgreSQL 中,如果没有聚合函数,此请求将无法工作,但我不了解 MySQL
  • 肯定更好,知道它给了我81个结果,所以还有26个要得到:D
【解决方案2】:

您无需为此加入:

Cart.group(:user_id).count

你说“浏览”是什么意思?

【讨论】:

  • 谢谢,好点,但结果我想要 i 用户关系,与所有拥有的用户,比如说 3 个购物车
  • 将其包含在您的原始问题中,以便可以针对您的需要提供答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-08
  • 2017-09-26
  • 2018-04-26
  • 2020-11-22
相关资源
最近更新 更多