我如何组合下面的2个查询?
1.9.3-p484 :003 > u = User.where(guest: false).count
(2.4ms) SELECT COUNT(*) FROM `users` WHERE `users`.`guest` = 0
=> 0
1.9.3-p484 :004 > u = User.where(guest: nil).count
(2.5ms) SELECT COUNT(*) FROM `users` WHERE `users`.`guest` IS NULL
=> 4150
我想抓住guest列中具有nil或false值的用户(在一个语句中)。
答案 0 :(得分:14)
User.where(guest: [false, nil]).count
这将生成如下查询:
SELECT COUNT(*) FROM "users" WHERE (("users"."guest" = 'f' OR "users"."guest" IS NULL))
或
User.where.not(guest: true).count
这将生成如下查询:
SELECT COUNT(*) FROM "users" WHERE ("users"."guest" != 't')
第二个将比第一个花费更少的时间。
答案 1 :(得分:2)
使用此:
User.where("guest = 'f' OR guest IS NULL").count
对于布尔字段,记录将使用来宾字段保存为t
(对于true)或f
(对于false)值。
答案 2 :(得分:0)
您始终可以使用sql方式来完成此操作,因为在rails
中尚未实现OR
的直接方法
u = User.where('guest = ? OR guest IS ?', false, nil).count