2016-02-06 36 views
0

這是我的查詢看起來是這樣的:如何針對多個值對SQL列執行查詢?

Connection.where("invited_user_id = :user_a_id AND inviter_user_id = :user_b_id", user_a_id: self.inviter.try(:id), user_b_id: self.invited.try(:id)).exists? 

我想什麼做的基本上是檢查invited_user_id對多個選項,例如像invited_user_id = [:user1, :user2]。但那不行。

如何檢查invited_user_id列中的值是否在變量:user1:user2或任何其他多個變量中。

這是可能的,而不使用明確的OR方法是不太乾的?

回答

2

不要將值直接放在查詢中,這是不安全的。使用?運算符來參數化您的查詢。

invited_user_ids = [:user1, :user2] 
Connection.where("invited_user_id IN (?)", invited_user_ids) 
+0

您是否可以更新此查詢以在此查詢中使用:'Connection.where(「invited_user_id =:user_a_id AND inviter_user_id =:user_b_id」,user_a_id:self.inviter.try(:id),user_b_id:self.invited.try(: id))。exists?exists? – marcamillion

+0

如你所建​​議的那樣,佔位符的條件與'?'的參數化相同。有關更多信息,請參閱http://guides.rubyonrails.org/active_record_querying.html#pure-string-conditions - 第2.2.1節。 – marcamillion

2

where哈希形式接受值的數組,因此:

Connection.where(invited_user_id: [1, 2, 3, 4, 5]) 

即會發現的所有記錄,其中invited_user_id是任何陣列中列出的值。

+0

任何方式來做到這一點在SQL? – marcamillion

+1

是的,但那不是你的問題。 'select * from table where invite_user_id IN(1,2,3,4,5)' – infused

+0

我的不好。我的意思是,以這樣的格式得到它:'Connection.where(「invited_user_id =:user_a_id AND inviter_user_id =:user_b_id」,user_a_id:self.inviter.try(:id),user_b_id:self.invited.try (:id))。exists?'我如何根據':user_a_id'和':user_b_id'查詢每一列? – marcamillion

相關問題