gpt4 book ai didi

ruby-on-rails - ActiveRecord,嵌套包含计数器

转载 作者:行者123 更新时间:2023-11-29 13:12:25 25 4
gpt4 key购买 nike

我有 3 个表(a、b、c)和“a”有_many 个“b”和“b”有_many 个“c”。我有这一行 c.includes(b: :a),但我需要计算每个“c”有多少个“a”,因此结果类似于 2 列。 C 中还有一些数据没有 b,所以当我显示它们时,它会抛出一个错误。

我可以通过 pgAdmin 的查询来完成它,它向我展示了我如何需要它,但我不能在 ActiveRecords 上完成它。

工作正常的查询是:

select count(c.id), a.name from c
left Join b on b.id = c.b_id
left join a on a.id = b.a_id
where c.created_at between '2018-11-08 00:00:00' and '2018-11-08 23:59:59' group by a.name

最佳答案

A.
joins(:b).
joins(b: :c).
group("a.name").
where("c.created_at between ? and ?", DateTime.new(2018,
11, 08), DateTime.new(2018, 11, 08).end_of_day).
count

返回一个散列,其中键为“a.name”,值为每个 A 的 C 计数。

如果您只想计算每个 A 的唯一 C,您可以指定 count("distinct c.id")

对于更复杂的查询,您始终可以使用原始 SQL 进行查询:

ActiveRecord::Base.connection.execute(<<~SQL).values
select count(c.id), a.name from c
left Join b on b.id = c.b_id
left join a on a.id = b.a_id
where c.created_at between '2018-11-08 00:00:00' and '2018-
11-08 23:59:59' group by a.name
SQL

返回结果的锯齿状数组。

至于孤立的 C 记录,当您查询它们时,您可以内部连接到 B。那只会返回具有 B 的 C。

关于ruby-on-rails - ActiveRecord,嵌套包含计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53236233/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com