IN演算子クエリでaraayデータを渡す方法。
data = ["055226", "000879", "069889", "078720", "078764"] //use array data in query statements IN operator
file_data = ActiveRecord::Base.connection.execute("SELECT t1.user_id, t2.dept_id, t1.price,
t3.first_name, t3.last_name
FROM price_table t1
INNER JOIN user_branch_table t2
on t1.user_id = t2.user_id
INNER JOIN user_deatils_table t3
on t1.user_id = t3.user_id
where t1.user_id in (#{data}) and now() between t2.start_dt and t2.end_dt").first
いろいろな方法で試しましたが、うまくいきませんでした。
以下が機能するはずです:
file_data = ActiveRecord::Base.connection.execute("SELECT t1.user_id, t2.dept_id, t1.price,
t3.first_name, t3.last_name
FROM price_table t1
INNER JOIN user_branch_table t2
on t1.user_id = t2.user_id
INNER JOIN user_deatils_table t3
on t1.user_id = t3.user_id
where t1.user_id in (#{data.join(',')}) and now() between t2.start_dt and t2.end_dt").first
上記は文字列入力では機能しません。以下は文字列入力で機能するはずです。
ActiveRecord::Base.connection.execute(
ActiveRecord::Base.send(:sanitize_sql_array, ["SELECT
t1.user_id, t2.dept_id, t1.price,
t3.first_name, t3.last_name
FROM price_table t1
INNER JOIN user_branch_table t2
on t1.user_id = t2.user_id
INNER JOIN user_deatils_table t3
on t1.user_id = t3.user_id
where t1.user_id in (?) and now() between t2.start_dt and t2.end_dt", data])).first
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加