【问题标题】:Rails - Combing conditions with ORRails - 使用 OR 组合条件
【发布时间】:2020-05-13 01:58:57
【问题描述】:

我正在 ruby​​ on rails 中实现过滤逻辑,用户可以在其中过滤与 OR 运算符结合的记录。所以我检查了在 active record 中实现 OR 的方式,因为我们在 rails 5,我们有 or method 来组合条件。

当使用 OR 方法时,我得到如下查询,

SELECT "users".*
FROM "users"
WHERE (
              (
                      (
                              "users"."first_name" ILIKE '%name1%' OR "users"."last_name" ILIKE '%name2%'
                          )
                      OR
                      "users"."email" ILIKE '%email%'
                  )
              OR (
                  "users"."email" ILIKE '%email%'
                  )
          );

查询构建类似于Model.where((((A OR B) OR C) OR D))。我们使用 Postgres 作为数据库。

我的疑问是 (((A OR B) OR C) OR D)(A OR B OR C OR D) 在 Postgres 中是否相等?这两者之间是否有任何性能差异。

注意:我检查了由Ransack advanced search 构造的查询,以(((A OR B) OR C) OR D) 格式构造的查询。

【问题讨论】:

    标签: ruby-on-rails postgresql activerecord ruby-on-rails-5 where-clause


    【解决方案1】:

    (((A OR B) OR C) OR D)(A OR B OR C OR D) 在 Postgres 中是否相等?

    不是关于 Postgres,而是关于一般的逻辑运算符。是的,两个表达式是等价的(虽然第一个是不必要的复杂):

    • 如果 4 个条件中的任何一个为真,则两个逻辑表达式都会产生真结果
    • 如果所有 4 个条件都为假,则两个表达式都会产生假结果

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-23
      • 2017-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-28
      相关资源
      最近更新 更多