【问题标题】:Position of object in database对象在数据库中的位置
【发布时间】:2010-05-04 08:23:07
【问题描述】:

我有模型Team,我有(即)team = Team.first :offset => 20。现在我需要在 db 表中获取我的 team 的位置数。

我可以用 ruby​​ 做到这一点:

Team.all.index team #=> 20

但我确信我可以在 SQL 上编写它,而且对于我来说使用大表会更便宜。

【问题讨论】:

    标签: sql ruby-on-rails ruby activerecord


    【解决方案1】:

    假设订单是通过 ID desc 进行的:

    class Team < ActiveRecord::Base
      def position
        self.class.count(:conditions => ['id <= ?', self.id]) 
      end
    end
    

    【讨论】:

    • 是的。这是好办法!不是很灵活。但对我来说已经足够了。
    【解决方案2】:

    我不确定我是否会跟随,但位置值是否会被大量使用,可能值得确保它在保存时设置。一个团队会随着时间的推移改变位置还是静态的?

    我不认为记录在数据库中的位置是数据库真正关心的事情之一,那种数据应该由你来设置。

    根据数据库,您可能可以使用LIMIT 子句,但不能使用它来查找特定行的位置。例如,仅选择第 20 到 21 行,但会因排序顺序而异。

    SELECT * FROM teams LIMIT 20,21
    

    我认为在您的模型上设置位置属性或使用连接模型是可行的方法。

    【讨论】:

    • 位置总是因为删除和添加数据而改变,我不想在模型中添加位置。 vlad.zloteanu 确实提出了很好的解决方案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-06
    • 1970-01-01
    • 2017-07-06
    • 2019-01-20
    • 2017-08-22
    • 1970-01-01
    相关资源
    最近更新 更多