2017-09-19 22 views
0

我有一個Widgets模型,它有大約3個核心活動記錄。一列被命名爲「form_values」爲具有格式:查詢hstore字段,其中值存在且等於x

"{\"a\":1,\"b\":2}" 
{"a" => "1", "b" => "2", "product_type" => "1"}.to_json 

我需要查詢所有活動的記錄,其form_values包含關鍵a其值爲1

我寫的東西,沒有工作,像這樣:

required_widgets = Widget.find_by_sql("select id from (select id, form_values from widgets where form_values!= '' and form_values::jsonb?'' and form_values::json->>'product_type' = '1') as required_widgets where (form_values::json->'a')::jsonb?'1' ") 

回答

0

如果你正在使用PostgreSQL支持的hstore data type,這是相當容易:

的兩個你用例described in the docs

1:檢查是否一個值被定義

hstore?文字

所以對於你的使用情況

form_values::hstore ? 'a' 

2:選擇(和比較)的值

hstore - >文本

所以供您使用案例

form_values -> product_type 
# this returns '1' 

3:將它們添加到查詢:

SELECT * FROM widgets 
WHERE form_values::hstore ? 'a' 
AND (form_values -> a)::integer = 1 

您也可以包裝它的部分到的ActiveRecord:

Widget.where(
    form_values::hstore ? 'a' 
    AND (form_values -> a)::integer = 1 
) 

* ::整數蒙上字符串值到一個整數。這在查詢記錄時會派上用場,其中a > 2

相關問題