2016-02-06 2 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 (" invite_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)) существует? ' – 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 (« invite_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)) существует. 'Как я могу запросить каждый из столбцов как': user_a_id', так и ': user_b_id'? – marcamillion

Смежные вопросы