Bac*_*cko 0 ruby mysql sql ruby-on-rails ruby-on-rails-3
我正在使用Rails 3.2.2,我想从数据库中检索记录,其中至少有 3个列值存在.也就是说,如果我有一个具有10个属性(表列)的类(一个MySQL数据库表),其值可以是nil(null),那么我想执行一个查询,以便返回其中至少有3个对象(记录)属性值存在(不null).
可能吗?如果是这样,怎么做?
更新如果我有一个具有10个属性(表列)的类(一个MySQL数据库表),其值可以是nil(null)或 " " (not null),那么我想执行一个查询,以便至少返回对象(记录)存在这10个属性值中的3个(不是null 而不是" ").
您可以与每个列的测试总和进行比较:IS NOT NULL AND <>
WHERE ( (colA IS NOT NULL AND colA <> ' ')
+ (colB IS NOT NULL AND colB <> ' ')
+ ...
+ (colJ IS NOT NULL AND colJ <> ' ')
) >= 3
Run Code Online (Sandbox Code Playgroud)
这是有效的,因为每个测试的布尔结果被隐式转换为1(如果为true)或0(如果为false); 因此,总和是既不是NULL也不是的列数' '.
或者,您可以NULL使用IFNULL()以下方法处理案例:
WHERE (IFNULL(colA<>' ',0) + IFNULL(colB<>' ',0) + ... + IFNULL(colJ<>' ',0)) >= 3
Run Code Online (Sandbox Code Playgroud)