[英]Hstore PostgreSQL Array comparision to any in array, Rails 3
感謝您的時間:
我有一組記錄(具體來說是用戶),其中的Hstore哈希保存在“數據”字段中。 問題是我想用一個SQL從該用戶組中獲取用戶,這些用戶在該“數據”字段中具有哈希hstore saved屬性,該屬性與另一個字符串值數組匹配,如下所示:
數據:{“ foo” =>“”,“ bar” =>“ bars”,“ baz” =>“ bazz”}
匹配[“ foos”,“ bazz”]的字符串數組
注意:我要匹配值,而不是鍵
每個用戶都有一組“數據” foo / bar / bas屬性,我從哈希發送一個“鍵”數組以提取並與第二個“值”數組進行比較,但我似乎無法制作單個SQL匹配。 到目前為止,這就是我所擁有的:
keys = ["foo", "baz"]
values_to_match = ["bars", "bazz"]
users.where("users.data -> ARRAY[?] ILIKE ANY (ARRAY[?])", keys, values_to_match)
假設您正在為模型User編寫類方法,則可以想到一個簡單的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)
似乎數組的交集可以正確地比較用戶數據字段中的值,即使文檔說它返回的哈希值也是如此:
hstore-> ARRAY [鍵] | 結果:{“ value”,“ value”}
感謝您抽出寶貴時間給所有花時間回答或閱讀的人,如果有人能澄清為什么會這樣,我將非常感謝
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.