gpt4 book ai didi

ruby-on-rails - 在 rails 中使用 ActiveRecord 从数据库返回每第 n 行

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

Ruby 1.9.2/rails 3.1/部署到 heroku --> posgresql

您好,一旦与某个对象相关的行数超过一定数量,我希望每隔第 n 行后退一次。这只是因为行(部分)用于显示图形数据,所以一旦返回的行数超过 20,最好每隔一秒返回一次,依此类推。

这个问题似乎指向了正确的方向: ActiveRecord Find - Skipping Records or Getting Every Nth Record

对行号进行修改是有意义的,但基本上使用:

@widgetstats = self.widgetstats.find(:all,:conditions => 'MOD(ROW_NUMBER(),3) = 0 ')

不起作用,它返回一个错误:

PGError: ERROR:  window function call requires an OVER clause

以及任何尝试解决这个问题的尝试,例如将我的 OVER 子句语法基于我在这个问题的答案中看到的内容:

Row numbering in PostgreSQL

以语法错误结尾,我无法得到结果。

我是否缺少一种更明显的方法来有效地返回第 n 个任务,或者如果我走在正确的 rails 上,是否有任何指示?显然返回所有数据并在之后将其修复在 Rails 中是可能的,但效率非常低。

谢谢!

最佳答案

我认为您正在寻找这样的查询:

SELECT * FROM (SELECT widgetstats.*, row_number() OVER () AS rownum FROM widgetstats ORDER BY id) stats WHERE mod(rownum,3) = 0

这很难使用 ActiveRecord 构建,因此您可能被迫执行以下操作:

@widgetstats = self.widgetstats.find_by_sql(
%{
SELECT * FROM
(
SELECT widgetstats.*, row_number() OVER () AS rownum FROM widgetstats ORDER BY id
) AS stats
WHERE mod(rownum,3) = 0
}
)

您显然希望更改使用的顺序并添加任何 WHERE 子句或其他修改以满足您的需要。

关于ruby-on-rails - 在 rails 中使用 ActiveRecord 从数据库返回每第 n 行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8250738/

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