Interroger MySQL avec CodeIgniter, sélectionner des lignes où le champ est NULL

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

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

Qui renvoie uniquement cette requête:

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

Le Champ archived est un champ DATE.

Est-il une meilleure façon de résoudre ce problème? Je sais que je peux simplement écrire la requête moi-même, mais je ne veux pas rester avec l'enregistrement actif tout au long de mon code.

69
demandé sur Ronny-André Bendiksen 2010-03-22 03:56:55

9 réponses

where('archived IS NOT NULL', null, false)
123
répondu zerkms 2010-03-22 01:01:27

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

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

Produit

WHERE `archived` IS NULL 

La bizarrerie est qu'il n'y a pas d'équivalent pour le négatif IS NOT NULL. Il y a, cependant, un moyen de le faire qui produit le résultat correct et échappe toujours à la déclaration:

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

Produit

WHERE `archived` IS NOT NULL
53
répondu J.Money 2013-09-09 17:29:39

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

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

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

6
répondu Come2Daddy 2012-11-27 17:00:41

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é n'EST PAS NULL',null,faux - );

Inverse:

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

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

WHERE archived IS NULL;
5
répondu Rodrigo Prazim 2016-07-25 08:26:58

Beaucoup mieux à utiliser suivant Ce n'est pas null

Où('archivé n'EST PAS NULL', null);

Est null

Où('archivé', null);

0
répondu Raza Rafaideen 2014-10-24 11:40:05

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

0
répondu Dave Strickler 2014-11-03 20:22:59

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

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

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

WHERE `column` IS NULL
0
répondu Lirio Push 2015-05-07 05:31:50

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

0
répondu Smith 2018-08-03 14:31:04

Une façon de vérifier que l'une ou l'autre colonne est nulle ou non est

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

En php si la colonne a des données, elle peut être représentée comme True sinon False Pour utiliser la comparaison multiple dans la commande where et pour vérifier si les données de colonne ne sont pas null faire comme

Voici l'exemple complet comment je filtre les colonnes dans la clause where (Codeignitor). Le dernier spectacle de not NULL Compression

$where = array('somebit' => '1', 'status' => 'Published', 'archived ' => TRUE );
$this->db->where($where);
-2
répondu Amir Qayyum Khan 2014-09-14 06:23:36