2010-03-22 41 views
65

Estoy usando la clase Active Record de CodeIgniter para consultar la base de datos MySQL. Necesito seleccionar las filas de una tabla en la que un campo no se establece en NULL:Consultar MySQL con CodeIgniter, seleccionar filas donde el campo es NULO

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

Eso sólo devuelve esta consulta:

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

archived El campo es un campo DATE.

¿Hay una manera mejor de solucionar esto? Sé que puedo escribir la consulta solo, pero quiero seguir con el registro activo a través de mi código.

Respuesta

116
where('archived IS NOT NULL', null, false) 
+13

Tenga en cuenta que cuando se establece este tercer parámetro a FALSE, CodeIgniter no va a tratar de proteger sus nombres de campo o tabla con palos de retroceso. –

+10

También vale la pena agregar que puede usar esto cuando esté pasando un parámetro de matriz: 'where (array (" foo "=>" bar "," archivado IS NOT NULL "=> null))'. Bastante intuitivo pero funciona. – Andrey

5

nulo no debe establecerse en cadena ...

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

Funciona correctamente cuando nulo no se envuelve en las cotizaciones.

+1

Esta debería ser la respuesta correcta aceptada – GusDeCooL

+3

@GusDeCooL No estoy seguro de que esto realmente funcione. Usando esta salida ... "field IS NOT" sin el NULL. La respuesta aceptada parece ser la forma de hacerlo correctamente. http://ellislab.com/forums/viewthread/119444/#593454 - brinda más información que nunca. – andyface

+7

-1 porque no funciona! Intenté una variación similar de esto: $ this-> db-> where ('when_removed is', null); dio un error de base de datos y mostró la consulta generada incluida: ... DONDE "when_removed" es ORDER BY "last_name" asc ... –

51

El registro activo definitivamente tiene algunos caprichos. Cuando pase una matriz a la función $this->db->where(), generará un IS NULL. Por ejemplo:

$this->db->where(array('archived' => NULL)); 

produce

WHERE `archived` IS NULL 

La peculiaridad es que no hay equivalente para el negativo IS NOT NULL. Hay, sin embargo, una forma de hacerlo que produce el resultado correcto y aún escapa a la declaración:

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

produce

WHERE `archived` IS NOT NULL 
+13

+1 porque 'where ('archived IS NOT NULL')' esto aún protege los identificadores y la respuesta aceptada no. –

-2

Una forma de comprobar cualquiera de las columnas es nulo o no es

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

en php si la columna tiene datos, puede representarse como verdadera De lo contrario False Para usar la comparación múltiple en el comando where y para verificar si los datos de la columna no son nulos hacerlo como

aquí está el ejemplo completo de cómo soy filtro de columnas en where cláusula (Codeignitor). El último espectáculo de No NULL compresión

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

Acabo de probar esto y arrojo el SQL que genera: 'SELECT * FROM (\' test \ ') WHERE \' somebit \ '= '1' AND \' status \ '= 'Publicado' Y \' sc_id \ '= 1'. Verificar si una columna es igual a 1 y verificar si una columna no es nula son extremadamente diferentes. –

0

mucho mejor utilizar siguiente Para no es nulo

donde ('archivada no es nulo', null);

Para es nulo

donde ('archivado', null);

0

Y solo para darle otra opción, puede usar NOT ISNULL(archived) como su filtro DONDE.

0

CodeIgniter genera una consulta "IS NULL" con sólo dejar la llamada sin parámetros:

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

La consulta generada es:

WHERE `column` IS NULL 
+0

OP está buscando 'IS NOT NULL' not' IS NULL' – AndFisher

4

CodeIgniter 3

Sólo

:

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

La consulta generada es:

WHERE archived IS NOT NULL; 

$ this-> db-> donde ('archivado no es nulo', nula, falsa); < < No es necesario

inverso:

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

La consulta generada es:

WHERE archived IS NULL; 
+0

Estaba buscando esto .. gracias! – William

Cuestiones relacionadas