Ich verwende die Active Record-Klasse von CodeIgniter, um die MySQL-Datenbank abzufragen. Ich muss die Zeilen in einer Tabelle auswählen, in der ein Feld nicht auf NULL gesetzt ist:
$this->db->where('archived !=', 'NULL');
$q = $this->db->get('projects');
Das gibt nur diese Abfrage zurück:
SELECT * FROM projects WHERE archived != 'NULL';
Das archived
Feld ist ein DATE
Feld.
Gibt es einen besseren Weg, um dies zu lösen? Ich weiß, dass ich die Abfrage einfach selbst schreiben kann, aber ich möchte im gesamten Code beim aktiven Datensatz bleiben.
php
mysql
codeigniter
activerecord
null
Rebellion
quelle
quelle
where(array("foo" => "bar", "archived IS NOT NULL" => null))
. Ziemlich unintuitiv, funktioniert aber.Der Active Record hat definitiv einige Macken. Wenn Sie ein Array an die
$this->db->where()
Funktion übergeben, wird IS NULL generiert. Zum Beispiel:$this->db->where(array('archived' => NULL));
produziert
WHERE `archived` IS NULL
Die Eigenart ist, dass es kein Äquivalent für das Negative gibt
IS NOT NULL
. Es gibt jedoch eine Möglichkeit, das richtige Ergebnis zu erzielen und sich dennoch der Aussage zu entziehen:$this->db->where('archived IS NOT NULL');
produziert
WHERE `archived` IS NOT NULL
quelle
where('archived IS NOT NULL')
dies immer noch Identifikatoren schützt und akzeptierte Antworten nicht.Null darf nicht auf string gesetzt werden ...
$this->db->where('archived IS NOT', null);
Es funktioniert ordnungsgemäß, wenn null nicht in Anführungszeichen eingeschlossen ist.
quelle
CodeIgniter 3
Nur:
$this->db->where('archived IS NOT NULL');
Die generierte Abfrage lautet:
WHERE archived IS NOT NULL;
Umgekehrt:
$this->db->where('archived');
Die generierte Abfrage lautet:
WHERE archived IS NULL;
quelle
Viel besser zu verwenden:
Denn ist nicht null:
where('archived IS NOT NULL', null);
Denn ist null:
where('archived', null);
quelle
Und um Ihnen noch eine weitere Option zu bieten, können Sie sie
NOT ISNULL(archived)
als WHERE-Filter verwenden.quelle
Codeigniter generiert eine "IS NULL" -Abfrage, indem der Aufruf ohne Parameter verlassen wird:
$this->db->where('column');
Die generierte Abfrage lautet:
WHERE `column` IS NULL
quelle
IS NOT NULL
nichtIS NULL
$ this-> db-> or_where ('end_date IS', 'NULL', false);
quelle
Sie können dies tun (wenn Sie NULL testen möchten)
$this->db->where_exec('archived IS NULL)
Wenn Sie NICHT NULL testen möchten
$this->db->where_exec('archived IS NOT NULL)
quelle
where_exec()
Methode? Ich sehe es nirgendwo in meinem CI-Projekt und kann online keine einzige Ressource finden, die von ihrem Namen spricht. Bitte unterstützen Sie diese Antwort mit einem Link zur Dokumentation.Eine Möglichkeit, eine der Spalten zu überprüfen, ist null oder nicht
$this->db->where('archived => TRUE); $q = $this->db->get('projects');
Wenn die Spalte in PHP Daten enthält, kann sie als True dargestellt werden, andernfalls als False
Hier ist das vollständige Beispiel, wie ich Filterspalten in der where-Klausel (Codeignitor) bin. Die letzte zeigt Not NULL Compression
$where = array('somebit' => '1', 'status' => 'Published', 'archived ' => TRUE ); $this->db->where($where);
quelle
SELECT * FROM (`test`) WHERE `somebit` = '1' AND `status` = 'Published' AND `sc_id` = 1
. Die Überprüfung, ob eine Spalte gleich 1 ist und ob eine Spalte nicht null ist, ist sehr unterschiedlich.