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

qq2729877005 · 2017年08月04日 · 最后由 qq2729877005 回复于 2017年08月04日 · 1430 次阅读
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)"

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

mlzhuyi #0 回复

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

chenge #1 回复

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

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

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

mlzhuyi #5 回复

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

chenge #4 回复

理解了,谢谢帮忙

qq2729877005 关闭了讨论。 06月29日 14:33
需要 登录 后方可回复, 如果你还没有账号请 注册新账号