【问题标题】:Rails SQL query counts results when not askedRails SQL 查询在未询问时计算结果
【发布时间】:2016-08-23 16:40:02
【问题描述】:

这个 rails/sql 代码...

@new_relationships = User.select('*')
                         .from("(#{@rels_unordered.to_sql}) AS rels_unordered")
                         .joins("
                    INNER JOIN  relationships
                    ON          rels_unordered.id = relationships.character_id
                    ORDER BY    relationships.created_at DESC
                    ")

产生一个这样开始的查询:

SELECT COUNT(*) FROM (SELECT .....

为什么要计算记录?我没有要求数。我只想选择加入后的所有列:

SELECT * FROM (SELECT .....

编辑

好的,看起来正在发生这种情况,因为我对@new_relationships 做的第一件事是

@new_relationships.any?

因为查询是延迟执行的,所以 .any?正在影响查询!我原以为 Rails 会执行查询,将所有记录放入@new_relationships,然后对它们进行计数。这是一个令人惊讶的功能。那么如何防止.any?影响查询?换句话说,我如何让查询按预期运行,然后计算结果?

【问题讨论】:

  • 这是来自您的 Rails 控制台还是服务器日志的输出?
  • 来自服务器日志。
  • 在控制台试一试,请给我查询 SQL
  • 有趣。它在控制台中的行为与预期的一样:SELECT * FROM (SELECT .....

标签: sql ruby-on-rails activerecord


【解决方案1】:

您可以对关系的dup 进行测试,因此这将是一个单独的关系对象,由any? 而不是原始关系对象修改。

@new_relationships.dup.any?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-22
    • 1970-01-01
    • 1970-01-01
    • 2014-11-04
    • 2011-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多