Ответ 1
where('archived IS NOT NULL', null, false)
Я использую класс ActiveX класса CodeIgniter для запроса базы данных 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)
Активная запись определенно имеет некоторые причуды. Когда вы передаете массив функции $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
Null не должен быть установлен в строку...
$this->db->where('archived IS NOT', null);
Он корректно работает, когда null не заключен в кавычки.
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;
Намного лучше использовать следующие Значение не равно null
где ('archived IS NOT NULL', null);
For имеет значение null
где ('archived', null);
И чтобы дать вам еще один вариант, вы можете использовать NOT ISNULL(archived)
в качестве фильтра WHERE.
Codeigniter генерирует запрос "IS NULL", просто оставив вызов без параметров:
$this->db->where('column');
Сгенерированный запрос:
WHERE `column` IS NULL
$this-> db-> or_where ('end_date IS', 'NULL', false);
Вы можете сделать (если вы хотите проверить NULL)
$this->db->where_exec('archived IS NULL)
Если вы хотите проверить NOT NULL
$this->db->where_exec('archived IS NOT NULL)
Один из способов проверить любой столбец - 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);