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.
9 réponses
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
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.
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;
Beaucoup mieux à utiliser suivant Ce n'est pas null
Où('archivé n'EST PAS NULL', null);
Est null
Où('archivé', null);
Et juste pour vous donner encore une autre option, vous pouvez utiliser NOT ISNULL(archived)
comme filtre WHERE.
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
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);