Запрос MySQL с помощью CodeIgniter, выбор строк, где поле NULL

Я использую класс ActiveX класса CodeIgniter для запроса базы данных MySQL. Мне нужно выбрать строки в таблице, где поле не установлено в NULL:

$this->db->where('archived !=', 'NULL');
$q = $this->db->get('projects');

Это возвращает только этот запрос:

SELECT * FROM projects WHERE archived != 'NULL';

Поле archived - это поле DATE.

Есть ли лучший способ решить эту проблему? Я знаю, что могу просто написать запрос сам, но я не буду придерживаться Active Record во всем моем коде.

Ответ 1

where('archived IS NOT NULL', null, false)

Ответ 2

Активная запись определенно имеет некоторые причуды. Когда вы передаете массив функции $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

Ответ 3

Null не должен быть установлен в строку...

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

Он корректно работает, когда null не заключен в кавычки.

Ответ 4

CodeIgniter 3

только

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

Сгенерированный запрос:

WHERE archived IS NOT NULL;

$this- > db- > где ('archived IS NOT NULL', null, false); & Л; < Не требуется

Inverse:

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

Сгенерированный запрос:

WHERE archived IS NULL;

Ответ 5

Намного лучше использовать следующие Значение не равно null

где ('archived IS NOT NULL', null);

For имеет значение null

где ('archived', null);

Ответ 6

И чтобы дать вам еще один вариант, вы можете использовать NOT ISNULL(archived) в качестве фильтра WHERE.

Ответ 7

Codeigniter генерирует запрос "IS NULL", просто оставив вызов без параметров:

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

Сгенерированный запрос:

WHERE `column` IS NULL

Ответ 8

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

Ответ 9

Вы можете сделать (если вы хотите проверить NULL)

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

Если вы хотите проверить NOT NULL

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

Ответ 10

Один из способов проверить любой столбец - null или нет

$this->db->where('archived => TRUE);
$q = $this->db->get('projects');

в php, если столбец имеет данные, он может быть представлен как True, иначе False Чтобы использовать несколько сравнений в команде where и проверить, не являются ли данные столбца  сделайте это как

вот полный пример того, как я являюсь столбцами фильтра в where where (Codeignitor). Последний показывает Не NULL Сжатие

$where = array('somebit' => '1', 'status' => 'Published', 'archived ' => TRUE );
$this->db->where($where);