gpt4 book ai didi

ruby-on-rails - RAILS/POSTGRESQL 中的多个 LIKE 和 AND 运算符

转载 作者:行者123 更新时间:2023-11-29 12:03:22 25 4
gpt4 key购买 nike

我使用 Rails 5.0.1 和 Postgresql 作为我的数据库。我有一个包含单词的 :content 列的表格。

问题:当我查找特定单词时,我想查看该单词是否包含我选择的字母(字符)。假设我想让 DB 返回包含字母“a”、“b”和“c”的单词(全部,但没有特定顺序)

我在做什么:我发现我可以使用Word.where("内容如?", "%a%").where("内容如?", "%b%").where("内容如?", "%c%") 或者Word.where("内容如何?内容如何?内容如何?", "%a%", "%b%", "%c%")在这两种情况下,即使我切换给定字母/子字符串的顺序,它也能正常工作,例如。两者都会找到单词“back”、“cab”等。

问题有没有更好/更DRY的方法?如果要查找具有 8 个不同字母的单词怎么办?我必须使用“类似的内容吗?” 8次?是否可以将参数作为数组传递? (假设我不知道用户将输入多少个字母)

最佳答案

PostgreSQL 有一个方便的 expr op all (array)表达,所以你可以说这样的话:

where content like all (array['%a%', '%b%', '%c'])

作为以下的缩写形式:

where content like '%a%'
and content like '%b%'
and content like '%c%'

此外,如果您将 Ruby 数组传递给 ActiveRecord,ActiveRecord 会方便地将 ? 占位符替换为逗号分隔列表。这让你可以这样说:

Word.where('content like all (array[?])', %w[a b c].map { |c| "%#{c}%" })

和:

Word.where('content like all (array[?])', some_other_array.map { |c| "%#{c}%" })

关于ruby-on-rails - RAILS/POSTGRESQL 中的多个 LIKE 和 AND 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42124181/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com