Xử lý các giá trị MySQL NULL
Chúng tôi đã thấy SQL SELECT lệnh cùng với WHERE mệnh đề để tìm nạp dữ liệu từ một bảng MySQL, nhưng khi chúng tôi cố gắng đưa ra một điều kiện, so sánh giá trị trường hoặc cột với NULL, nó không hoạt động bình thường.
Để xử lý tình huống như vậy, MySQL cung cấp ba toán tử:
IS NULL - Toán tử này trả về true, nếu giá trị cột là NULL.
IS NOT NULL - Toán tử này trả về true, nếu giá trị cột không phải là NULL.
<=> - Toán tử này so sánh các giá trị (không giống như toán tử =) đúng ngay cả với hai giá trị NULL.
Các điều kiện liên quan đến NULL là đặc biệt. Bạn không thể sử dụng =NULL hoặc! = NULLđể tìm kiếm các giá trị NULL trong các cột. Những so sánh như vậy luôn luôn thất bại vì không thể phân biệt được chúng có đúng hay không. Đôi khi, thậm chí NULL = NULL không thành công.
Để tìm kiếm các cột có hoặc không NULL, hãy sử dụng IS NULL hoặc là IS NOT NULL.
Sử dụng giá trị NULL tại Command Prompt
Giả sử rằng có một bảng được gọi là tcount_tbl trong cơ sở dữ liệu TUTORIALS và nó chứa hai cột cụ thể là tutorial_author và tutorial_count, trong đó NULL tutorial_count chỉ ra rằng giá trị là không xác định.
Thí dụ
Hãy thử các ví dụ sau:
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>
Bạn có thể thấy rằng = và != không hoạt động với các giá trị NULL như sau:
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)
Để tìm các bản ghi mà cột tutorial_count có hoặc không phải là NULL, các truy vấn phải được viết như trong chương trình sau.
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)
Xử lý giá trị NULL trong PHP Script
Bạn có thể dùng if...else điều kiện để chuẩn bị một truy vấn dựa trên giá trị NULL.
Thí dụ
Ví dụ sau lấy tutorial_count từ bên ngoài và sau đó so sánh nó với giá trị có sẵn trong bảng.
<?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);
?>