0

Rails 3.2.2を使用していますが、10個の列値のうち少なくとも3個が存在するデータベースからレコードを取得したいと思います。つまり、値がnilnull)になる可能性のある10個の属性(テーブル列)を持つクラス(MySQLデータベーステーブル)がある場合、クエリを実行して、それらの10個のうち少なくとも3個がオブジェクト(レコード)を返すようにします。属性値が存在します(ではありませんnull)。

出来ますか?もしそうなら、それを作る方法は?

UPDATE値がnilnullまたは" "(ではない null)の10個の属性(テーブル列)を持つクラス(MySQLデータベーステーブル)がある場合、少なくともオブジェクト(レコード)を返すようにクエリを実行したいと思いますこれらの10個の属性値のうち3個が存在します(""ではなくnull

4

1 に答える 1

6

個々の列のテストの合計と比較できます。IS NOT NULL AND <>

WHERE (  (colA IS NOT NULL AND colA <> ' ')
       + (colB IS NOT NULL AND colB <> ' ')
       + ...
       + (colJ IS NOT NULL AND colJ <> ' ')
      ) >= 3

これが機能するのは、各テストのブール結果が暗黙的に1(trueの場合)または0(falseの場合)に変換されるためです。したがって、合計は、NULLでもない列の数です' '

NULLまたは、次を使用してケースを処理することもできますIFNULL()

WHERE (IFNULL(colA<>' ',0) + IFNULL(colB<>' ',0) + ... + IFNULL(colJ<>' ',0)) >= 3
于 2012-05-18T08:59:32.357 に答える