با عرض سلام و وقت بخیر خدمت کاربران سایت پی وی لرن ، و کاربرانی که دوره آموزش MySQL را دنبال می کنند. در بخش قبلی طرز استفاده از دستور SELECT را برای استخراج داده ها از دیتابیس را مرور کردیم، همچنین نمونه کدهایی از استخراج تمام داده های یک جدول را بررسی کردیم، اما این ساده ترین حالت است و در بسیاری موارد شما نیاز دارید که فقط بخشی از داده های یک یا چند جدول مرتبط را استخراج کنید، برای این منظور شما نیاز با استفاده از یک دستور شرطی در ادامه ی ساختار SELECT دارید، در این مبحث شما یاد خواهید گرفت که چه طور از دستور شرطی WHERE در MySQL برای استخراج رکوردهای مورد نیاز خود استفاده کنید.
در ادامه ی این آموزش سینتکس دستور شرطی WHERE در MySQL و مثال هایی از آن را ارائه کرده ایم.
ساختار عمومی دستور SELECT به همراه دستور شرطی WHERE در MySQL به صورت زیر است :
1 2 | SELECT field1, field2,...fieldN table_name1, table_name2... [WHERE condition1 [AND [OR]] condition2..... |
دستور WHERE همانند ساختار شرطی if که در بسیاری از زبان های برنامه نویسی استفاده می شود عمل می کنند.
این دستور برای مقایسه مقدار داده شده با مقدار فیلد موجود در یک جدول MySQL استفاده می شود.
اگر مقدار داده شده در دستور WHERE بامقدار فیلد موجود در جدول مربوطه برابر باشد، MySQL آن ردیف را باز می گرداند.
لیستی از عملگرهایی که کی می توان به همراه دستور WHERE استفاده کرد به شرح زیر است :
فرض بر این است که مقدار فیلد A برابر با ۱۰ و مقدار فیلد B نیز برابر با ۲۰ است :
عملگر | توضیحات | مثال |
---|---|---|
= | اگر مقدار دو فیلد با هم برابر باشند این عملگر true را برمی گرداند. | A = B) is not true) |
!= | اگر مقدار دو فیلد با هم برابر نباشند این عملگر true را برمی گرداند. | (A != B) is true) |
> | اگر مقدار فیلد سمت چپ عملگر از سمت راست آن بیشتر باشد، این عملگر true را برمی گرداند. | (A > B) is not true) |
< | اگر مقدار فیلد سمت چپ عملگر از سمت راست آن کمتر باشد، این عملگر true را برمی گرداند. | (A < B) is true) |
>= | اگر مقدار فیلد سمت چپ عملگر از سمت راست آن بیشتر یا مساوی آن باشد، این عملگر true را برمی گرداند. | (A >= B) is not true) |
<= | اگر مقدار فیلد سمت چپ عملگر از سمت راست آن کمتر یا مساوی آن باشد، این عملگر true را برمی گرداند. | (A <= B) is true) |
دستور WHERE برای وقتی که می خواهید ردیف های انتخاب شده را از یک جدول جدا کنید، بسیار مفید است، مخصوصا زمانی که از MySQL Join استفاده می کنید.
این یک روش معمول برای جستجوی رکوردها با استفاده از کلید اصلی برای جستجوی سریعتر است.
اگر شرط داده شده با هیچ رکوردی در جدول مطابقت نداشته باشد، پس از آن پرس و جو هیچ ردیفی بازگردانده نمی شود.
در این بخش یک نمونه کد از دستور SELECT به همراه شرط WHERE ارائه شده است.
مثال-۱
مثال زیر تمام رکوردها را از جدول tutorials_tbl که فیلد name آن ها با Sanjay برابر باشد را بازمی گرداند:
1 2 3 4 5 6 7 8 9 10 11 12 13 | root@host# mysql -u root -p password; Enter password:******* mysql> use TUTORIALS; Database changed mysql> SELECT * from tutorials_tbl WHERE tutorial_author = 'Sanjay'; +-------------+----------------+-----------------+-----------------+ | tutorial_id | tutorial_title | tutorial_author | submission_date | +-------------+----------------+-----------------+-----------------+ | 3 | JAVA Tutorial | Sanjay | 2007-05-21 | +-------------+----------------+-----------------+-----------------+ 1 rows in set (0.01 sec) mysql> |
به استثنای دستور LIKE در سایر موارد مقایسه در SQL، بزرگی یا کوچکی حروف مهم نیست.
البته شما می توانید با استفاده از کلید BINARY بصورت زیر، حساسیت به حروف را در Query خود اعمال کنید:
1 2 3 4 5 6 7 8 9 | root@host# mysql -u root -p password; Enter password:******* mysql> use TUTORIALS; Database changed mysql> SELECT * from tutorials_tbl \ WHERE BINARY tutorial_author = 'sanjay'; Empty set (0.02 sec) mysql> |
شما می توانید از دستورات SQL به همراه دستور شرطی WHERE در تابع ()mysql_query در PHP استفاده کنید.
این تابع برای اجرای دستورات SQL استفاده می شود و برای واکشی داده ها باید از تابع ()mysql_fetch_array استفاده کرد.
تابع فوق یک سطر از جدول را در قالب آرایه ی وابسته ، آرایه ی عددی یا هر دو مورد بر می گرداند.
اگر سطرهای بیشتری وجود نداشته باشد این تابع مقدار FALSE را برمی گداند.
مثال-۲
مثال زیر تمام رکوردها را از جدول tutorials_tbl که name آن ها با Sanjay برابر است را برمی گرداند:
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 | <?php $dbhost = 'localhost:3036'; $dbuser = 'root'; $dbpass = 'rootpassword'; $conn = mysql_connect($dbhost, $dbuser, $dbpass); if(! $conn ) { die('Could not connect: ' . mysql_error()); } $sql = 'SELECT tutorial_id, tutorial_title, tutorial_author, submission_date FROM tutorials_tbl WHERE tutorial_author = "Sanjay"'; 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 "Tutorial ID :{$row['tutorial_id']} <br> ". "Title: {$row['tutorial_title']} <br> ". "Author: {$row['tutorial_author']} <br> ". "Submission Date : {$row['submission_date']} <br> ". "--------------------------------<br>"; } echo "Fetched data successfully\n"; mysql_close($conn); ?> |
دستور SELECT به تنهایی فقط تمام داده های موجود در یک جدول یا چند را باز می گرداند، در بسیاری از موارد شما نیاز خواهید داشت که فقط تعدادی از رکوردها بازگردانده شود، برای این منظور دستور شرطی WHERE در MySQL شما را به هدفتان می رساند.