#mysql #sql #ruby-on-rails
#mysql #sql #ruby-on-rails
Вопрос:
Как передать данные 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
Я пробовал разные способы, но не получилось правильно.
Ответ №1:
Приведенное ниже должно работать:
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
Комментарии:
1. спасибо за ответ, второй работает, но мне нужно добавить новую цену данных файла при отображении на экране ‘file_data’. У меня возникает проблема с этим.
2. Теперь я получаю данные из базы данных с помощью
file_data = 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]))
но у меня есть другие данные для добавления в файловые данные в конце данных каждой записи.file_new_price{"new_price"=>"900", new_price"=>"960"}
как это добавить?3. Хорошо, я получаю из приведенных выше записей типа
file_data = [{"user_id"=>"101", "dept_id"=>"01", "price"=>"950", "first_name"=>"ajit", "last_name"=>"shinde"}, {"user_id"=>"102", "dept_id"=>"02", "price"=>"950", "first_name"=>"vikas", "last_name"=>"patil"}, {"user_id"=>"103", "dept_id"=>"03", "price"=>"950", "first_name"=>"rohit", "last_name"=>"patel"}]
это запись db, и я хочу добавить new_price к каждой записи в конце данных изcsv_data = [{"user_id"=>"101", "date"=>"2020-08-13", "new_price"=>"1000"}, {"user_id"=>"102", "date"=>"2020-08-13", "new_price"=>"800"}]
4. in query
.first
не работает во втором запросе. задана только одна запись. и я попытался получить каждого пользователя с недавней записью.