big*_*ato 3 activerecord ruby-on-rails
我如何组合下面的两个查询?
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
Run Code Online (Sandbox Code Playgroud)
我想抓住guest列中具有nil或false值的用户(在一个语句中).
Che*_*ian 14
User.where(guest: [false, nil]).count
Run Code Online (Sandbox Code Playgroud)
这将生成如下查询:
SELECT COUNT(*) FROM "users" WHERE (("users"."guest" = 'f' OR "users"."guest" IS NULL))
Run Code Online (Sandbox Code Playgroud)
要么
User.where.not(guest: true).count
Run Code Online (Sandbox Code Playgroud)
这将生成如下查询:
SELECT COUNT(*) FROM "users" WHERE ("users"."guest" != 't')
Run Code Online (Sandbox Code Playgroud)
第二个将比第一个花费更少的时间.