我有一個表hstore,有時我用它存儲信息的複選框。 我們使用'1'進行檢查,'0'未使用。沒有爲hstore沒有默認值,以便用戶可以在4個州:軌道查詢hstore其中關鍵是不是東西或不存在
customer_a = Customer.new({properties: {checkbox: "1"}}) # checked
customer_b = Customer.new({properties: nil}) # unchecked(object doesn't exist)
customer_c = Customer.new({properties: {checkbox: "0"}}) # unchecked(unchecked)
customer_d = Customer.new({properties: {taco: "chicken"}}) # unchecked(key doesn't exist)
現狀:我怎樣才能找到所有未選中的行?
Customer.where(" customer.properties -> 'checkbox' NOT LIKE '1' ")
^^^不起作用^^^空「複選框」鍵,其屬性忽略客戶是空
Customer.where("customers.properties -> 'checkbox' LIKE '%0%' OR customers.properties IS NULL")
^^^不起作用^^^也忽略了其中的關鍵缺失
是否有更好的方法在單個查詢中執行此操作?
查詢應該返回[customer_b, customer_c, customer_d]
目前的解決方案: - 檢查:Customer.where(" customer.properties -> 'checkbox' LIKE '1' ")
- 選中:Customer.all - Customer.where(" customer.properties -> 'checkbox' LIKE '1' ")
是有一個SQL查詢返回的地方重點hstore不存在行?
「@ customers.where(」customers.properties - >'checkbox'LIKE?or customers.properties IS NULL「,」0「)'(不知道這裏的語法) – MrYoshiji
@MrYoshiji謝謝!那讓我成爲那裏的一部分。我認爲我需要尋找空字符串,但我還不太確定 –
我認爲使用複選框從所有客戶中減去所有用戶可能是最簡單的方法 –