web-dev-qa-db-fra.com

Interrogation de MySQL avec CodeIgniter, sélection de lignes dont le champ est NULL

J'utilise la classe Active Record de CodeIgniter pour interroger la base de données MySQL. Je dois sélectionner les lignes d'une table dans laquelle un champ n'est pas défini sur NULL:

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

Cela ne renvoie que cette requête:

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

Le champ archived est un champ DATE.

Y a-t-il une meilleure façon de résoudre ce problème? Je sais que je peux juste écrire la requête moi-même, mais je ne veux pas rester avec Active Record dans tout mon code.

70
where('archived IS NOT NULL', null, false)
130
zerkms

Le disque actif a certainement quelques bizarreries. Lorsque vous transmettez un tableau à la fonction $this->db->where(), il génère un IS NULL. Par exemple:

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

produit 

WHERE `archived` IS NULL 

Le problème, c'est qu'il n'y a pas d'équivalent pour le IS NOT NULL négatif. Cependant, il existe un moyen de le faire qui produit le résultat correct et échappe encore à la déclaration:

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

produit

WHERE `archived` IS NOT NULL
58
J.Money

Null ne doit pas être défini sur string ...

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

Cela fonctionne correctement lorsque null n'est pas encapsulé dans des guillemets.

7
Come2Daddy

CodeIgniter 3

Seulement:

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

La requête générée est:

WHERE archived IS NOT NULL;

$ this-> db-> where ('archivé IS NON NULL', null , false ); << Pas nécessaire

Inverse:

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

La requête générée est:

WHERE archived IS NULL;
6
Rodrigo Prazim

Codeigniter génère une requête "IS NULL" en laissant simplement l'appel sans paramètre:

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

La requête générée est:

WHERE `column` IS NULL
0
Lirio Push

Vous pouvez faire (si vous voulez tester NULL)

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

Si vous voulez tester NOT NULL

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

Et pour vous donner encore une autre option, vous pouvez utiliser NOT ISNULL(archived) comme filtre WHERE.

0
Dave Strickler

Il est préférable d’utiliser la suite de For n’est pas nul 

où ('archivé IS NOT NULL', null);

Pour est nul

où ('archivé', nul);

0
Raza Rafaideen

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

0
Smith