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

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

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

chenge 回复

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

qq2729877005 回复

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

qq2729877005 回复

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

mlzhuyi 回复

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

chenge 回复

理解了,谢谢帮忙

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