簡體   English   中英

Hstore PostgreSQL數組比較到Rails 3中的任何數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM