gpt4 book ai didi

ruby-on-rails - postgres offset/limit 的工作方式与 mysql 不同吗?

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

我有一个 Rails 应用程序(postgres + postGIS),它有一个带有评级列(整数)的帖子模型。如果我进入控制台并执行以下操作:

Post.order("rating DESC").map(&:id)
=> [9, 15, 19, 6, 17, 5, 4, 16, 1, 3, 13, 20, 14, 10, 8, 12, 7, 2, 18, 11]

但是,如果我尝试使用限制和偏移量一次循环遍历这些,我会得到奇怪的结果。

Post.order("rating DESC").limit(1).offset(0)
=> [#<Post id: 5, body: "Hi", rating: 4, location: #<RGeo::Geographic::SphericalPointImpl:0x81bb34c0 "POINT (-118.495 34.017)">, user_id: 8, created_at: "2012-07-25 22:43:41", updated_at: "2012-07-25 22:43:41">]

为什么那个帖子是#5?应该是#9。无论如何,当我应用偏移量时,它会变得更加古怪。

>Post.order("rating DESC").limit(1).offset(1)
=> [#<Post id: 5, body: "Hi", rating: 4, location: #<RGeo::Geographic::SphericalPointImpl:0x81bb34c0 "POINT (-118.495 34.017)">, user_id: 8, created_at: "2012-07-25 22:43:41", updated_at: "2012-07-25 22:43:41">]

>Post.order("rating DESC").limit(1).offset(2)
=> [#<Post id: 5, body: "Hi", rating: 4, location: #<RGeo::Geographic::SphericalPointImpl:0x81bb34c0 "POINT (-118.495 34.017)">, user_id: 8, created_at: "2012-07-25 22:43:41", updated_at: "2012-07-25 22:43:41">]

>Post.order("rating DESC").limit(1).offset(3)
=> [#<Post id: 5, body: "Hi", rating: 4, location: #<RGeo::Geographic::SphericalPointImpl:0x81bb34c0 "POINT (-118.495 34.017)">, user_id: 8, created_at: "2012-07-25 22:43:41", updated_at: "2012-07-25 22:43:41">]

>Post.order("rating DESC").limit(1).offset(4)
=> [#<Post id: 15, body: "I luv coffee", rating: 4, flagged: 0, location: #<RGeo::Geographic::SphericalPointImpl:0x82260df4 "POINT (-118.495 34.017)">, user_id: 1, created_at: "2012-07-25 22:43:41", updated_at: "2012-07-25 22:43:41">]

最佳答案

您是否注意到您显示的唯一结果的 rating 是 4?您在没有辅助排序键的情况下按 rating 进行排序,因此无法保证领带会以何种顺序出现,甚至无法保证领带在两次不同的调用中的排序方式相同。

尝试在您的订单中添加一个决胜局:

Post.order('rating DESC, id')

然后在您正在查看的内容中包含评分:

Post.order('rating desc, id').select('id, rating').map { |p| [ p.id, p.rating ] }
Post.order('rating desc, id').select('id, rating').limit(1).offset(3).map { |p| [ p.id, p.rating ] }
#...

这应该会给您带来合理且一致的结果。

关于ruby-on-rails - postgres offset/limit 的工作方式与 mysql 不同吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11677212/

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