با عرض سلام و وقت بخیر خدمت کاربران سایت پی وی لرن ، و کاربرانی که دوره آموزش MySQL را دنبال می کنند. در بخش های قبلی چگونگی استخراج داده ها از جداول MySQL را بررسی کردیم و روش انجام اینکار آشنا شدیم، اما زمانیکه شما از دستورات شرطی مانند WHERE برای استخراج بخشی از رکوردها از جداول استفاده می کنید، اگر مقادیر رکوردها NULL باشد ممکن است نتایج بازگشتی بدرستی انجام نشده باشد. برای جلوگیری از اینگونه مشکلات باید با چگونگی مدیریت مقادیر NULL در MySQL آشنایی داشته باشید که ما در ادامه ی این آموزش به آن پرداخته ایم.
در ادامه ی این مبحث شما را با دستورات کنترل مقادیر NULL در MySQL آشنا خواهیم کرد.
برای مدیریت مقادیر NULL در MySQL سه عملگر ارائه شده است :
دقت کنید که برای تست NULL بودن یک فیلد نمی توان از روش هایی مانند = NULL یا != NULL استفاده کرد و اگر استفاده کنید با خطا مواجه می شوید.
فرض می کنیم که یک جدول داریم که tcount_tbl نامیده می شود و در دیتابیس TUTORIALS قرار دارد.
همچنین جدول فوق شامل دو فیلد به نام های tutorial_author و tutorial_count می باشد.
مثال-۱
مثال زیر را در نظر بگیرید:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | 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> |
می توانید ببینید که عملگرهای = و != برای تست مقادیر NULL کارایی ندارند :
1 2 3 4 5 | 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) |
برای پیدا کردن رکوردهایی که در فیلد tutorial_count مقدار NULL را دارا باشند و یا نباشند، می توانید برنامه را به صورت زیر بنویسید:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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) |
برای مدیریت مقادیر NULL در اسکریپت PHP می توانید از ساختار شرطی if…else استفاده کنید.
مثال-۲
مثال زیر tutorial_count را از بیرون می گیرد و سپس آن را با مقدار موجود در جدول مقایسه می کند:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | <?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); ?> |
فیلدهایی که در هنگام درج داده ها در دیتابیس مقدار نمی گیرند، مقدار پیش فرض NULL را خواهند گرفت، پس بهتر است در هنگام استخراج داده ها از جداول دیتابیس با استفاده از دستورات مدیریتی مقادیر NULL در MySQL ابتدا از NULL بودن با نبودن فیلدها اطمینان حاصل کنید.