Umgang mit MySQL NULL-Werten
Wir haben die SQL gesehen SELECT Befehl zusammen mit dem WHERE Klausel zum Abrufen von Daten aus einer MySQL-Tabelle, aber wenn wir versuchen, eine Bedingung anzugeben, mit der das Feld oder der Spaltenwert verglichen wird NULLfunktioniert es nicht richtig.
Um mit einer solchen Situation umzugehen, bietet MySQL drei Operatoren:
IS NULL - Dieser Operator gibt true zurück, wenn der Spaltenwert NULL ist.
IS NOT NULL - Dieser Operator gibt true zurück, wenn der Spaltenwert nicht NULL ist.
<=> - Dieser Operator vergleicht Werte, was (im Gegensatz zum Operator =) auch für zwei NULL-Werte gilt.
Die Bedingungen für NULL sind besonders. Sie können = nicht verwendenNULL oder! = NULLin Spalten nach NULL-Werten suchen. Solche Vergleiche scheitern immer, weil es unmöglich ist zu sagen, ob sie wahr sind oder nicht. Manchmal schlägt sogar NULL = NULL fehl.
Verwenden Sie, um nach Spalten zu suchen, die NULL sind oder nicht IS NULL oder IS NOT NULL.
Verwenden von NULL-Werten an der Eingabeaufforderung
Angenommen, es gibt eine Tabelle mit dem Namen tcount_tbl in der TUTORIALS-Datenbank und es enthält nämlich zwei Spalten tutorial_author und tutorial_count, wobei ein NULL-Tutorial_count angibt, dass der Wert unbekannt ist.
Beispiel
Probieren Sie die folgenden Beispiele aus -
root@host# mysql -u root -p password;
Enter password:*******
mysql> use TUTORIALS;
Database changed
mysql> create table tcount_tbl
-> (
-> tutorial_author varchar(40) NOT NULL,
-> tutorial_count INT
-> );
Query OK, 0 rows affected (0.05 sec)
mysql> INSERT INTO tcount_tbl
-> (tutorial_author, tutorial_count) values ('mahran', 20);
mysql> INSERT INTO tcount_tbl
-> (tutorial_author, tutorial_count) values ('mahnaz', NULL);
mysql> INSERT INTO tcount_tbl
-> (tutorial_author, tutorial_count) values ('Jen', NULL);
mysql> INSERT INTO tcount_tbl
-> (tutorial_author, tutorial_count) values ('Gill', 20);
mysql> SELECT * from tcount_tbl;
+-----------------+----------------+
| tutorial_author | tutorial_count |
+-----------------+----------------+
| mahran | 20 |
| mahnaz | NULL |
| Jen | NULL |
| Gill | 20 |
+-----------------+----------------+
4 rows in set (0.00 sec)
mysql>
Sie können das = und sehen != Arbeiten Sie nicht wie folgt mit NULL-Werten -
mysql> SELECT * FROM tcount_tbl WHERE tutorial_count = NULL;
Empty set (0.00 sec)
mysql> SELECT * FROM tcount_tbl WHERE tutorial_count != NULL;
Empty set (0.01 sec)
Um die Datensätze zu finden, in denen die Spalte tutorial_count NULL ist oder nicht, sollten die Abfragen wie im folgenden Programm gezeigt geschrieben werden.
mysql> SELECT * FROM tcount_tbl
-> WHERE tutorial_count IS NULL;
+-----------------+----------------+
| tutorial_author | tutorial_count |
+-----------------+----------------+
| mahnaz | NULL |
| Jen | NULL |
+-----------------+----------------+
2 rows in set (0.00 sec)
mysql> SELECT * from tcount_tbl
-> WHERE tutorial_count IS NOT NULL;
+-----------------+----------------+
| tutorial_author | tutorial_count |
+-----------------+----------------+
| mahran | 20 |
| Gill | 20 |
+-----------------+----------------+
2 rows in set (0.00 sec)
Umgang mit NULL-Werten in einem PHP-Skript
Du kannst den ... benutzen if...else Bedingung zum Vorbereiten einer Abfrage basierend auf dem NULL-Wert.
Beispiel
Das folgende Beispiel zeigt die tutorial_count von außen und vergleicht es dann mit dem in der Tabelle verfügbaren Wert.
<?php
$dbhost = 'localhost:3036';
$dbuser = 'root';
$dbpass = 'rootpassword';
$conn = mysql_connect($dbhost, $dbuser, $dbpass);
if(! $conn ) {
die('Could not connect: ' . mysql_error());
}
if( isset($tutorial_count )) {
$sql = 'SELECT tutorial_author, tutorial_count
FROM tcount_tbl
WHERE tutorial_count = $tutorial_count';
} else {
$sql = 'SELECT tutorial_author, tutorial_count
FROM tcount_tbl
WHERE tutorial_count IS $tutorial_count';
}
mysql_select_db('TUTORIALS');
$retval = mysql_query( $sql, $conn );
if(! $retval ) {
die('Could not get data: ' . mysql_error());
}
while($row = mysql_fetch_array($retval, MYSQL_ASSOC)) {
echo "Author:{$row['tutorial_author']} <br> ".
"Count: {$row['tutorial_count']} <br> ".
"--------------------------------<br>";
}
echo "Fetched data successfully\n";
mysql_close($conn);
?>