Sql 使用数组搜索数据库以匹配另一个数组中的单个值

Sql 使用数组搜索数据库以匹配另一个数组中的单个值,sql,ruby-on-rails,database,postgresql,Sql,Ruby On Rails,Database,Postgresql,这有点复杂 我目前有一个搜索功能,允许客户根据一个或多个状态搜索记录 他们可以输入多个状态,此函数将搜索与这些状态中任何一个匹配的帖子 有了这个,帖子只能有一个状态 我正在尝试扩展并允许每个帖子有多个状态。但要实现这一点,我需要找出如何将任何一个搜索状态与任何一个发布状态匹配 在本例中,类型=dest,状态=mo,ks,ar,ok 它将匹配在dest_state中有任何一个状态且其中只有一个状态的帖子 我需要将其扩展并匹配如下内容: dest_state = "mo, ks, ok, ar"

这有点复杂

我目前有一个搜索功能,允许客户根据一个或多个状态搜索记录

他们可以输入多个状态,此函数将搜索与这些状态中任何一个匹配的帖子

有了这个,帖子只能有一个状态

我正在尝试扩展并允许每个帖子有多个状态。但要实现这一点,我需要找出如何将任何一个搜索状态与任何一个发布状态匹配

在本例中,类型=dest,状态=mo,ks,ar,ok

它将匹配在dest_state中有任何一个状态且其中只有一个状态的帖子

我需要将其扩展并匹配如下内容:

dest_state = "mo, ks, ok, ar" 

states = "ks, ne, co"
我需要匹配,因为ks两者都有

但如果dest_状态中只有一个状态,我也需要它工作

我的数据库有100k+记录,这将通过搜索

dest_state是数据库记录中的存储字段

您可以使用:

另一个好处是,state数组列上的GIN索引可以支持此运算符。对性能有巨大的影响。例如:

由于您的表很大,我将使用int或smallint代替字符串作为状态代码。或者使用一个

另一种选择是,在职位和州之间建立并实现n:m关系。详情:


您想匹配任何状态还是所有状态?任何搜索到的状态都可以匹配任何发布的状态…这很好是数组的SQL运算符。有点希望避免创建新表。。。该表将有3列。。。id,post_id,每个post有1-10条记录的状态。。。所以我有30万张唱片,远远超过100万张records@BigAlRubyNewbie:没错。阵列列在存储和性能方面胜出,但您需要索引支持。以及文本[]的int[]或smallint[]节拍的性能。不过,索引在这里比类型重要得多。另一方面,规范化模式允许许多其他标准特性,如引用完整性,并使一些事情变得更容易。
dest_state = "mo, ks, ok, ar" 

states = "ks, ne, co"
SELECT * FROM tbl WHERE dest_state && states;