gpt4 book ai didi

sql - 如何在 RoR 中包含最后更新的行

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

所以我有两个模型,CategoryTopic,任何类别都可以有很多主题。

问题是,如何查询所有类别并包含每个类别的最后更新主题?

如果我这样做

class Category < ActiveRecord::Base
has_many :topics
has_one :last_updated_topic, -> {order(updated_at: :desc)}, class_name: 'Topic'
end

然后这样查询->

Category.all.includes(:last_updated_topic)

然后它起作用了,但让我害怕的是,我有一个 SQL 查询加载这样的主题:

SELECT "topics".* FROM "topics" WHERE "topics"."category_id" IN (1, 2, 3)  ORDER BY "topics"."updated_at" DESC

所以它加载了所有主题,可能有数千个,而我只需要每个类别的最后更新的主题。

所以我想知道是否有一种简单的方法可以在不编写自定义 SQL 的情况下解决这个问题,或者我是否错了什么?

我应该改用这个吗? ->

SELECT categories.*, t.title as last_topic_title FROM "categories" LEFT JOIN (SELECT topics.* FROM topics ORDER BY topics.updated_at DESC LIMIT 1) t ON categories.id = t.category_id

最佳答案

您可以使用内部查询:

has_one :last_updated_topic, -> { where(updated_at: Topic.maximum(:updated_at)), class_name: 'Topic'

关于sql - 如何在 RoR 中包含最后更新的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30885309/

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