【问题标题】:How to search an array column for multiple strings如何在数组列中搜索多个字符串
【发布时间】:2019-11-20 16:35:39
【问题描述】:

我的表中有这样设置的列

add_column :logs, :names, :string, array: true
add_index :logs, :names, using: :gin

我有这个查询通过名称列搜索表以返回包含 robert 的记录

Logs.where("? = ANY (names)", 'robert')

我很好奇如何在表格中搜索多个名称。像这样的东西,但下面的查询不起作用

Logs.where("? = ANY (names)", ['robert', 'bob'])

我希望它具有类似这样的功能,我传入一个数组并返回所有匹配的记录

User.where(id: [1,2,3,4])

我需要它作为 OR 语句

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:
    User.where(names: ['robert', 'bob'])
    
    User.where("names IN (?) ", ['robert', 'bob'])
    

    注意:区分大小写

    This answer will also helps you

    【讨论】:

    • 我需要这个语句是一个 OR 语句,所以如果 name 包含 robert 或 bob 它应该返回它
    • 还要注意列是名称,它是一个数组
    • @RobMason 我已经更新了答案。你现在可以检查一下吗..
    • 错误信息:数组值必须以“{”或维度信息开头
    • @RobMason 它对我来说很好用。你能重新检查一下吗?
    【解决方案2】:
    # SQL Contains Operator
    1) User.where("names @> ARRAY[?]::varchar[]", ['robert', 'bob'])
    
    
    # Contains Operator
    2) User.where.contains(names: ['robert', 'bob'])
    
    
    # Overlap Operator
    3) User.where.overlap(names: ['robert', 'bob'])
    

    【讨论】:

    • 我需要该语句是 OR 语句,因此如果名称包含 robert 或 bob,它应该返回它
    猜你喜欢
    • 2014-10-26
    • 1970-01-01
    • 2011-07-22
    • 1970-01-01
    • 2020-09-29
    • 1970-01-01
    • 2019-07-23
    • 1970-01-01
    相关资源
    最近更新 更多