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" }
感谢所有花时间回答或阅读的人,如果有人能澄清为什么会发生这种情况,我将不胜感激
感谢您的宝贵时间:
我有一组记录(具体来说是用户),其中一个 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" }
感谢所有花时间回答或阅读的人,如果有人能澄清为什么会发生这种情况,我将不胜感激