gpt4 book ai didi

ruby-on-rails - Rails has_many 关联计数子行

转载 作者:行者123 更新时间:2023-12-03 10:12:15 25 4
gpt4 key购买 nike

什么是有效获取父表的所有行以及每行的子项数的“rails 方式”?

我不想用 counter_cache因为我想根据某些时间条件运行这些计数。

陈词滥调的博客示例:
文章表。每篇文章有0个或多个评论。

我希望能够提取每篇文章在过去一小时、一天、一周内的评论数。

但是,理想情况下,我不想遍历列表并对每篇文章进行单独的 sql 调用,也不想使用 :include预取所有数据并在应用服务器上进行处理。

我想运行一个 SQL 语句并获得一个包含所有信息的结果集。

我知道我可以硬编码出完整的 SQL,也许可以使用 .find只需设置 :joins , :group , 和 :conditions参数......但我想知道是否有“更好”的方式......又名“铁路方式”

提前致谢

最佳答案

这个 activerecord 调用应该做你想要的:

Article.find(:all, :select => 'articles.*, count(posts.id) as post_count',
:joins => 'left outer join posts on posts.article_id = articles.id',
:group => 'articles.id'
)

这将返回一个文章对象列表,每个对象都有方法 post_count在它上面包含文章的帖子数作为字符串。

该方法执行sql类似如下:
SELECT articles.*, count(posts.id) AS post_count
FROM `articles`
LEFT OUTER JOIN posts ON posts.article_id = articles.id
GROUP BY articles.id

如果您好奇,以下是运行此类查询时可能会看到的 MySQL 结果示例:
+----+----------------+------------+
| id | text | post_count |
+----+----------------+------------+
| 1 | TEXT TEXT TEXT | 1 |
| 2 | TEXT TEXT TEXT | 3 |
| 3 | TEXT TEXT TEXT | 0 |
+----+----------------+------------+

关于ruby-on-rails - Rails has_many 关联计数子行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/796150/

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