web-dev-qa-db-ja.com

CodeIgniterでMySQLをクエリし、フィールドがNULLの行を選択する

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を使いたくないのです。

72
rebellion
where('archived IS NOT NULL', null, false)
136
zerkms

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
59
J.Money

ヌルを文字列に設定しないでください...

$this->db->where('archived IS NOT', null);

Nullが引用符にラップされていない場合、適切に機能します。

7
Come2Daddy

CodeIgniter

のみ:

$this->db->where('archived IS NOT NULL');

生成されるクエリは次のとおりです。

WHERE archived IS NOT NULL;

$ this-> db-> where( 'archived IS NOT NULL'、nullfalse); <<不要

逆:

$this->db->where('archived');

生成されるクエリは次のとおりです。

WHERE archived IS NULL;
6
Rodrigo Prazim

Codeigniterは、呼び出しをパラメーターなしで残すだけで、「IS NULL」クエリを生成します。

$this->db->where('column');

生成されるクエリは次のとおりです。

WHERE `column` IS NULL
0
Lirio Push

あなたがすることができます(NULLをテストしたい場合)

$this->db->where_exec('archived IS NULL) 

NOT NULLをテストする場合

$this->db->where_exec('archived IS NOT NULL) 
0
Pavan K

さらに別のオプションを提供するために、NOT ISNULL(archived)をWHEREフィルターとして使用できます。

0
Dave Strickler

次のForはnullではない

where( 'archived IS NOT NULL'、null);

Forはnull

where( 'archived'、null);

0
Raza Rafaideen

$ this-> db-> or_where( 'end_date IS'、 'NULL'、false);

0
Smith