将附加条件附加到查询
Posted
技术标签:
【中文标题】将附加条件附加到查询【英文标题】: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”。复制和粘贴错误。
【参考方案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)
【讨论】:
以上是关于将附加条件附加到查询的主要内容,如果未能解决你的问题,请参考以下文章