Hstore PostgreSQL 数组与数组中任何一个的比较,Rails 3

Hstore PostgreSQL Array comparision to any in array, Rails 3

感谢您的宝贵时间:

我有一组记录(具体来说是用户),其中一个 Hstore 哈希保存在 "data" 字段中。问题是我想做一个 SQL 来从那组用户中获取用户,哈希 hstore 保存在 "data" 字段中 属性 匹配另一个字符串值数组,如下所示:

数据:{ "foo" => "", "bar" => "bars", "baz" => "bazz" }

匹配 ["foos"、"bazz"]

的字符串数组

注意:我想匹配值,而不是键

每个用户都有一组 "data" foo/bar/bas 属性,我从哈希中发送一个 "keys" 的数组来提取并与第二个 "values" 数组进行比较但我似乎无法进行单个 SQL 匹配。到目前为止,这就是我所拥有的:

keys = ["foo", "baz"]
values_to_match = ["bars", "bazz"]
users.where("users.data -> ARRAY[?] ILIKE ANY (ARRAY[?])", keys, values_to_match)

假设您正在为模型 User 编写 class 方法,您可能会想到一个简单的 sql 解决方案:

def self.matched_users(keys, values_to_match)
  result = self
  keys.each_with_index do |key, index|
    result.where("users.data -> ? ILIKE ?", key, "%#{values_to_match[index]}%")
  end
  result
end

或者如果传递哈希

def self.matched_users(hash)
  hash.inject(users) do |result, (key, value)|
    result = result.where("users.data -> ? ILIKE ?", key, "%#{value}%")
  end
end

我找到了一个简单的 SQL 解决方案:

users.where("(users.data -> ARRAY[?]) && (ARRAY[?])", keys, values_to_match)

似乎数组的交集正确地比较了用户数据字段中的值,即使文档说它 returns 散列如:

hstore -> ARRAY[keys] | result: { "value", "value" }

感谢所有花时间回答或阅读的人,如果有人能澄清为什么会发生这种情况,我将不胜感激