gpt4 book ai didi

ruby-on-rails - 具有连接和顺序的不同记录

转载 作者:行者123 更新时间:2023-11-29 11:16:39 28 4
gpt4 key购买 nike

我在 UserDonations 之间有一个简单的关系,因为一个用户有很多捐赠,一个捐赠属于一个用户。 我想做的是获取一个用户列表,按最近的捐赠排序。

这是我正在尝试的:

首先我想获取 uniq 用户的总数,它按预期工作:

> User.joins(:donations).order('donations.created_at').uniq.count
(3.2ms) SELECT DISTINCT COUNT(DISTINCT "users"."id") FROM "users" INNER JOIN "donations" ON "donations"."user_id" = "users"."id"
=> 384

接下来,当我删除 count 方法时,出现“ORDER BY 表达式必须出现在选择列表中”的错误:

> User.joins(:donations).order('donations.created_at').uniq
User Load (0.9ms) SELECT DISTINCT "users".* FROM "users" INNER JOIN "donations" ON "donations"."user_id" = "users"."id" ORDER BY donations.created_at
PG::InvalidColumnReference: ERROR: for SELECT DISTINCT, ORDER BY expressions must appear in select list
LINE 1: ...ON "donations"."user_id" = "users"."id" ORDER BY donations....

然后我尝试通过显式设置乍一看似乎有效的 SELECT 子句来修复 Postgres 错误:

 > User.select('DISTINCT "users".id, "users".*, "donations".created_at').joins(:donations).order('donations.created_at')
User Load (17.6ms) SELECT DISTINCT "users".id, "users".*, "donations".created_at FROM "users" INNER JOIN "donations" ON "donations"."user_id" = "users"."id" ORDER BY donations.created_at

但是返回的记录数没有考虑DISTINCT语句,返回692条记录:

> _.size
=> 692

如何获得预期数量的结果 (384),同时还按捐赠的 created_at 时间戳排序?

最佳答案

试试这个:

User.select('users.*,MAX(donations.created_at) as most_recent_donation').
joins(:donations).order('most_recent_donation desc').group('users.id')

我假设一个用户有很多捐赠,这将选择最近创建的捐赠,并选择不同的用户通过他们的 id 过滤。

不过我还没有测试过。

关于ruby-on-rails - 具有连接和顺序的不同记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21970153/

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