【问题标题】:Append additional conditions to a query将附加条件附加到查询
【发布时间】:2021-11-16 19:36:08
【问题描述】:

我有一个查询,我需要添加几个条件作为OR 子句,因为我想使用LIKE,所以我不能使用IN

那么如何从一个数组中添加多个OR

SQL 应该如下所示:

SELECT * FROM TABLE where a like '%a%' OR a LIKE '%b%' OR a LIKE '%c%' ...

其中 'a'、'b'、'c' 来自数组。

dataset
   .where(column:, Sequel.like(:column, '%#{myarray.first}%'))

myarray.drop(1).each do |v|
    dataset.or(Sequel.like(:column, '%#{v}%'))
end

dataset.limit(100)

【问题讨论】:

  • SQL.like 来自哪里,它是如何实现的?这不是标准的 Rails 方法。
  • 我更新了问题。这是“续集”而不是“SQL”。复制和粘贴错误。

标签: sql ruby-on-rails ruby sequel


【解决方案1】:

Rails API docs 开始,.or 条件查询应该链接在.where 方法之后

dataset.where(column:, Sequel.like(:column, '%#{myarray.first}%'))
       .or(dataset.where(column:, Sequel.like(:column, '%#{myarray.second}%'))
       .or(dataset.where(column:, Sequel.like(:column, '%#{myarray.third}%'))

完整答案:

dataset = dataset.where(column:, Sequel.like(:column, '%#{myarray.first}%'))

myarray.drop(1).each do |v|
    dataset = dataset.or(dataset.where(column:, Sequel.like(:column, '%#{v}%'))
end

dataset.limit(100)

在“vanilla”Rails 中,如果没有 gem(假设 Sequel.like 来自这个 gem),同样可以实现。

dataset = dataset.where("column LIKE ?", '%#{myarray.first}%'))

myarray.drop(1).each do |v|
    dataset = dataset.or(dataset.where("column LIKE ?", '%#{v}%'))
end

dataset.limit(100)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-25
    相关资源
    最近更新 更多