Rails里面有LIKE和数组
我怎么能这样做?
myarray = ["name1","name2"] Product.where('name ILIKE ?', %#{myarray}%)
我需要获得名称如name1
和name2
所有产品。
这可能吗?
我想你想用ILIKE
函数测试所有值。
这是在Postgres中完成的:
select * from table where value ilike any (array['%foo%', '%bar%', '%baz%']);
尝试转换为Rails / Ruby语法,如下所示:
myarray_with_percetage_signs = ["name1","name2"].map {|val| "%#{val}%" } Product.where("name ILIKE ANY ( array[?] )", myarray_with_percetage_signs)
最近遇到了同样的问题,而且既然没有一个回答帮助我(我使用的是MySQL数据库),我想我会分享我的解决方案。
-
如果您有一个小型数据库并且不介意检索所有产品,则可以使用以下方法从数据库中检索所有产品后进行过滤:
Product.select { |product| myarray.any? { |str| product.name.include? str } }
-
但是,如果您更喜欢在数据库级别执行查询,则可以通过首先将数组转换为以管道分隔的列表来使用
WHERE REGEXP
子句:Product.where("`name` REGEXP '#{Regexp.new(myarray.join('|'))}'")
如果你在相等的意义上寻找类似LIKE 'string'
(比如SQL中的LIKE 'string'
) where
接受一个Hash of数组值:
Product.where(name: myarray) Product.where(name: myarray).to_sql # => SELECT "products".* FROM "products" WHERE "products"."name" IN ('x', 'y')
但是,如果你想通过子串过滤(比如SQL中的LIKE '%substring%'
),请查看Edgars Jekabsons的回答。
Product.where('name IN (?)', myarray)
应该做的伎俩;)