代码之家  ›  专栏  ›  技术社区  ›  mikelikespie

使用1个查询在ActiveRecord中计数并选择对象

  •  2
  • mikelikespie  · 技术社区  · 15 年前

    我们有想要在堆栈中表示的对象(想想在MMO中堆叠项目)。将有重复的行。

    假设我们的owned_objects表如下所示。

    user_id | object_id
    1       | 27
    1       | 27
    3       | 46
    3       | 46
    5       | 59
    

    SELECT
      user_id,
      object_id,
      count(*) AS count
    FROM owned_objects
    GROUP BY
      user_id,
      object_id;
    

    OwnedObject s(甚至只是得到清晰的 Object s也可以)和与之关联的计数。

    2 回复  |  直到 15 年前
        1
  •  3
  •   cwninja    15 年前

    怎么样

    @objects = user.objects.all(:select => "count(*) as count, objects.*", :group => :object_id)
    

    还是类似的?

    @object.first.count # the "stack depth" of the first object.
    

    这假设 has_and_belongs_to_many :objects 或者 has_many :objects, :through => :owned_objects 关于用户。

        2
  •  0
  •   mikelikespie    15 年前

    建立 A. 解决方案,但不确定是否最干净(希望不是)。