Запрос MySQL с CodeIgniter, выбор строк, где поле NULL - PullRequest
72 голосов
/ 22 марта 2010

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

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

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

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

Поле archived является полем DATE.

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

Ответы [ 9 ]

136 голосов
/ 22 марта 2010
where('archived IS NOT NULL', null, false)
58 голосов
/ 21 декабря 2012

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

1012 * производит *

WHERE `archived` IS NOT NULL
7 голосов
/ 23 февраля 2012

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

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

Работает правильно, когда ноль не заключен в кавычки.

6 голосов
/ 25 июля 2016

CodeIgniter 3

Только:

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

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

WHERE archived IS NOT NULL;

$ this-> db-> где ('архивированный НЕ НУЛЬ', null , false ); << Не обязательно </p>

Inverse:

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

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

WHERE archived IS NULL;
0 голосов
/ 03 августа 2018

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

0 голосов
/ 07 мая 2015

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

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

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

WHERE `column` IS NULL
0 голосов
/ 03 ноября 2014

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

0 голосов
/ 24 октября 2014

Гораздо лучше использовать следующие значения For is not null

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

For is null

где ('archived', ноль);

0 голосов
/ 07 мая 2014

Один из способов проверить, является ли столбец пустым или нет -

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

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

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

$where = array('somebit' => '1', 'status' => 'Published', 'archived ' => TRUE );
$this->db->where($where);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...