新手问题 ActiveRecord 中 where 查询接口的一些问题

qq2729877005 · August 04, 2017 · Last by qq2729877005 replied at August 04, 2017 · 1418 hits
Customer.where("id in ?", ids)
Customer.where("id in (?)", ids)

customers 表中的 id 是 integer 类型,而 ids 是个字符串数组 ["1", "2", "3"],用上面的两种方式查询,结果:第一种失败,第二种才能查到数据,这是为什么?

?和 (?) 的区别是什么?

Customer.where('id in ?', [1,2]).to_sql
=> "SELECT `customers`.* FROM `customers` WHERE (id in 1,2)"

Customer.where('id in (?)', [1,2]).to_sql
=> "SELECT `customers`.* FROM `customers` WHERE (id in (1,2))"

Customer.where(id: [1,2]).to_sql
=> "SELECT `customers`.* FROM `customers` WHERE `customers`.`id` IN (1, 2)"

这个大概意思是说括号要自己写吧,?只是负责替换数据。

Reply to mlzhuyi

看不懂,意思是没区别吗?

Reply to chenge

我知道阿,但?和 (?) 这两者之间有括号和没括号有什么不同

这个应该是 sql 语法要求有括号吧。

就是因为 IN 要求加 () 啊,另外推荐用第三种

Reply to mlzhuyi

就这么简单?怪不得度娘不到,看来是我想多了,谢谢了!我一直都是在用第三种的,只是在改 bug 的时候发现了这种查询方法不理解,所以来此问问,谢谢解答

Reply to chenge

理解了,谢谢帮忙

qq2729877005 closed this topic. 29 Jun 14:33
You need to Sign in before reply, if you don't have an account, please Sign up first.