CodeIgniterのActive Recordクラスを使用して、MySQLデータベースを照会しています。フィールドがNULLに設定されていないテーブルの行を選択する必要があります。
$this->db->where('archived !=', 'NULL');
$q = $this->db->get('projects');
次のクエリのみが返されます。
SELECT * FROM projects WHERE archived != 'NULL';
archived
フィールドはDATE
フィールドです。
これを解決するより良い方法はありますか?クエリを自分で書くことができることは知っていますが、コード全体でActive Recordを使いたくないのです。
where('archived IS NOT NULL', null, false)
Active Recordには間違いなくいくつかの癖があります。配列を$this->db->where()
関数に渡すと、IS NULL)が生成されます。例:
$this->db->where(array('archived' => NULL));
生産する
WHERE `archived` IS NULL
癖は、負のIS NOT NULL
に相当するものがないことです。ただし、正しい結果を生成し、ステートメントをエスケープする方法があります。
$this->db->where('archived IS NOT NULL');
生産する
WHERE `archived` IS NOT NULL
ヌルを文字列に設定しないでください...
$this->db->where('archived IS NOT', null);
Nullが引用符にラップされていない場合、適切に機能します。
CodeIgniter
のみ:
$this->db->where('archived IS NOT NULL');
生成されるクエリは次のとおりです。
WHERE archived IS NOT NULL;
$ this-> db-> where( 'archived IS NOT NULL'、null、false); <<不要
逆:
$this->db->where('archived');
生成されるクエリは次のとおりです。
WHERE archived IS NULL;
Codeigniterは、呼び出しをパラメーターなしで残すだけで、「IS NULL」クエリを生成します。
$this->db->where('column');
生成されるクエリは次のとおりです。
WHERE `column` IS NULL
あなたがすることができます(NULLをテストしたい場合)
$this->db->where_exec('archived IS NULL)
NOT NULLをテストする場合
$this->db->where_exec('archived IS NOT NULL)
さらに別のオプションを提供するために、NOT ISNULL(archived)
をWHEREフィルターとして使用できます。
次のForはnullではない
where( 'archived IS NOT NULL'、null);
Forはnull
where( 'archived'、null);
$ this-> db-> or_where( 'end_date IS'、 'NULL'、false);