【问题标题】:Counting the number of records计算记录数
【发布时间】:2011-03-14 17:51:22
【问题描述】:

我有一个 Rails 应用程序,我有以下数据库架构: 每个用户有很多成员,每个成员都有很多标签。 表之间的链接是直接的(Members 表有一个 user_id 列,Tags 有一个 member_id 列)。

计算与用户关联的标签数量最有效的方法是什么? 是通过 Rails 和 activerecord 还是纯 sql?

有什么想法/例子吗?

【问题讨论】:

    标签: mysql ruby-on-rails activerecord


    【解决方案1】:

    在您的标签模型中,您可以添加范围:

    范围 :count_by_user, lambda { |user| members.where("members.user_id >= ?", user) }

    那怎么样?您的 Tag 模型中是否有成员函数/关系?

    【讨论】:

    • 我得到了undefined method 'tags' for #<User:0xb544630>,因为在用户模块中没有直接链接到标签模型(我不想改变它)
    • 修复了通话..现在怎么样?
    【解决方案2】:

    打电话

    User.first.tags.count
    

    (这是假设您在用户模型中设置了关系。)

    几乎相同的速度(减去 Active Record 的速度)。 AR 会很聪明,可以将结果限制为 1,并实际使用 COUNT() sql 函数,这是计算记录数的最佳方法。

    如果您真的担心这些微优化,那么,如果您编写纯 SQL 并绕过 AR,我相信您可以节省一两毫秒。

    【讨论】:

    • 此调用将统计与 User.first 关联的标签数。
    猜你喜欢
    • 2015-01-31
    • 1970-01-01
    • 1970-01-01
    • 2020-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多