it-swarm.com.de

Abfragen von MySQL mit CodeIgniter, Auswählen von Zeilen, bei denen das Feld NULL ist

Ich verwende die Active Record-Klasse von CodeIgniter, um die MySQL-Datenbank abzufragen. Ich muss die Zeilen in einer Tabelle auswählen, in denen 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 Feld archived ist ein Feld DATE.

Gibt es einen besseren Weg, um dies zu lösen? Ich weiß, dass ich die Abfrage einfach selbst schreiben kann, aber ich möchte den Active Record nicht in meinem gesamten Code beibehalten.

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

Der Active Record hat definitiv einige Macken. Wenn Sie ein Array an die Funktion $this->db->where() übergeben, wird ein NULL IS generiert. Zum Beispiel:

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

produziert 

WHERE `archived` IS NULL 

Die Besonderheit ist, dass es für den negativen IS NOT NULL keine Entsprechung gibt. Es gibt jedoch eine Möglichkeit, dies zu tun, die das korrekte Ergebnis liefert und der Aussage immer noch entgeht:

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

produziert

WHERE `archived` IS NOT NULL
58
J.Money

Null darf nicht auf String gesetzt werden ...

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

Es funktioniert einwandfrei, wenn null nicht in Anführungszeichen eingeschlossen ist.

7
Come2Daddy

CodeIgniter 3

Nur:

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

Die generierte Abfrage lautet:

WHERE archived IS NOT NULL;

$ this-> db-> where ('archived IS NOT NULL', null , false ); << nicht notwendig

Inverse:

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

Die generierte Abfrage lautet:

WHERE archived IS NULL;
6
Rodrigo Prazim

Codeigniter generiert eine Abfrage "IS NULL", indem der Aufruf ohne Parameter verlassen wird:

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

Die generierte Abfrage lautet:

WHERE `column` IS NULL
0
Lirio Push

Sie können dies tun (wenn Sie NULL testen möchten)

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

Wenn Sie NOT NULL testen möchten

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

Um Ihnen noch eine weitere Option zu geben, können Sie NOT ISNULL(archived) als WHERE-Filter verwenden.

0
Dave Strickler

Viel besser ist Folgendes zu verwenden Für ist nicht null 

where ('archiviert IS NOT NULL', null);

Für ist null

wo ("archiviert", null);

0
Raza Rafaideen

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

0
Smith