انتخاب ردیف هایی از جدول تنها به انتخاب ستون ها محدود نمی شود. می توان با افزودن دستورهایی انتخاب ها را محدود ساخت. منظور از محدود ساختن انتخاب، مشخص کردن مشخصه های بیشتری برای انتخاب و دسترسی به رکورد موردنظر به صورت دقیق تر می باشد (با نوشتن کدهای پیشرفته تر).
پیش از این تنها دستور SELECT را مورد بررسی قرار دادیم اما الان می خواهیم خصوصیات و دستورات دیگر را بررسی کنیم. باری دیگر به شکل استفاده از دستور SELECT دقت کنید:
1 |
SELECT columnName(s) FROM tableName otherPropertie(s) |
WHERE
با توجه به قبل، هنگام استفاده تنها از SELECT شکلی شبیه به زبان گفتاری دارد به شکل “ ردیف هایی را از جدول انتخاب کن” اما با استفاده از دستور WHERE به همراه آن شکل آن به صورت “ردیف هایی را از جدول انتخاب کن درجایی که …و…” تغییر می کند.
پس همانطور که حدس می زنید شکل دستوری آن به شکل زیر خواهد بود:
SELECT columnName(s) FROM tableName otherPropertie(s)
با توجه به شکل دستوری گفته شده، پس از دستور WHERE باید شرط انتخاب ستون ها را نوشت. باز هم برای محدود کردن بیشتر انتخاب ها (به دلیل امکان وجود چندین رکورد در یک انتخاب) از AND استفاده می کنیم تا چندین شرط را تعیین کنیم.
برای روشن تر شدن موضوع مثالی می زنیم.
دیتابیس test_db شامل جدول persons همراه با چندین رکورد می باشد. به مثال زیر دقت کنید:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?php $con = mysqli_connect("localhost", "root", "", "test_db"); $query = "SELECT name, age FROM persons WHERE id = '2’ AND name=’Mohammad’"; if(mysqli_connect_errno($con) > 0) echo "Can not connect to server:<br/>".mysqli_connect_error(); else{ $result = mysqli_query($con, $query); while($persons = mysqli_fetch_array($result)){ echo "'".$persons['name']."' is ".$persons['age']." years old<br/>"; } } mysqli_close($con); ?> |
خروجی:

به قسمت مشخص شده در کد دقت کنید. دستور WHERE id = ‘2’ AND name=’Mohammad’ ردیف هایی از جدول را انتخاب می کند که مقدار ستون id آنها برابر با 2 باشد و مقدار ستون name برابر با Mohammad باشد (مقدار ستون id نمی تواند در دو ردیف تکراری باشد و برای ستون name برابر با Mohammad هم تنها یک رکورد وچود دارد. پس تنها یک ردیف بازگردانده می شود).
بهتر است تمام مقادیر غیرقابل تشخیص و از پیش تعریف نشده برای MySQL مانند مقدار “2” یا “Alireza” در داخل تک کوتیشن قرار گیرد (مقادیری مانند اعداد می توانند در داخل کوتیشن قرار نگیرند اما توصیه می شود که تمامی این مقادیر برای جلوگیری از اشتباه یا خطا در داخل کوتیشن قرار بگیرد).
ORDER BY
دستور ORDER BY باعث مرتب سازی رکوردهای بازگشتی می شود. مرتب سازی می تواند براساس یکی از ستون های جدول انجام شود. برای مثال براساس شناسه (id) یا تاریخ (date)، زیرا در بسیاری از مواقع نیاز است تا اطلاعات (رکوردها) برای نمایش مرتب شوند.
این دستور شامل یک مقدار پارامتر به عنوان نام ستونی که مرتب سازی براساس آن انجام می شود، می باشد.
می خواهیم مثال جدول persons را با این دستور آزمایش کنیم. اگر بدون مرتب سازی خروجی را چاپ کنیم خروجی به شکل زیر می باشد:

حالا می خواهیم خروجی را برحسب نام (name) مرتب کنیم. پس برنامه ی ما به شکل زیر خواهد بود:
1 2 3 4 5 6 7 8 9 10 11 12 |
$con = mysqli_connect("localhost", "root", "", "test_db"); $query = "SELECT name, age FROM persons ORDER BY name"; if(mysqli_connect_errno($con) > 0) echo "Can not connect to server:<br/>".mysqli_connect_error(); else{ $result = mysqli_query($con, $query); while($persons = mysqli_fetch_array($result)){ echo "'".$persons['name']."' is ".$persons['age']." years old<br/>"; } } mysqli_close($con); ?> |
خروجی:

می بینید که اگر داده ها را برحسب نام (name) مرتب (sort) کنیم جای رکوردها کمی تغییر می کند.
استفاده از این دستور در برنامه ها و جدول هایی که دارای رکوردهای زیادی است، بسیار مفید است و باعث نظم می شود و حتی گاهی استفاده از این دستور الزامی می شود.
همچنین می توان درخواست ها را با یکدیگر ادغام کرد. مثلا از دو دستور WHERE و ORDER BY همزمان با یکدیگر استفاده کنیم. می توانیم از دستور زیر برای درخواست های پیشرفته تری استفاده کرد:
SELECT * FROM persons WHERE age > 20 ORDER BY name
این دستور تمام رکوردهایی که دارای مقدار بالای 20 برای ستون age می باشند را برحسب نام (name) مرتب می کند.
DESC
این دستور رکوردهای انتخابی از جدول را به صورت برعکس برمی گرداند. یکی از مثال های کاربردی این دستور هنگامی است که می خواهیم رکوردها را براساس تاریخ ایجادشان مرتب کنیم. در این هنگام می خواهیم آخرین رکوردهای ثبت شده را در ابتدا نمایش دهیم.
این دستور همراه با دستور ORDER BY استفاده می شود به شکلی که تنها کافی است عبارت DESC را پس از دستور ORDER BY قرار دهیم.
رکوردهای جدول persons را براساس سن مرتب کرده (از کم به زیاد) و سپس با استفاده از DESC ترتیب آن را برعکس کرده، در نتیجه سن افراد از بزرگ به کوچک نمایش داده خواهد شد. این برنامه به شکل زیر می باشد:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<?php $con = mysqli_connect("localhost", "root", "", "test_db"); $query = "SELECT name, age FROM persons ORDER BY age DESC"; if(mysqli_connect_errno($con) > 0) echo "Can not connect to server:<br/>".mysqli_connect_error(); else{ $result = mysqli_query($con, $query); if($result){ while($persons = mysqli_fetch_array($result)){ echo "'".$persons['name']."' is ".$persons['age']." years old<br/>"; } } else echo "No Index!!!"; } mysqli_close($con); ?> |
خروجی:

LIMIT
این دستور نیز برای مشخص کردن تعداد رکوردهای مشخصی می باشد مثلا اگر خروجی در هنگام عدم استفاده از این دستور 10 رکورد باشد، می توان تنها 5 ردیف آن را از ردیف سوم (یعنی رکوردهای 3 تا 8 که 5 ردیف می باشد) انتخاب کرد. دستور LIMIT شامل دو پارامتر می باشد که عدد اول رکورد شروع و عدد دوم حداکثر تعداد رکوردها را تعیین می کند. می توان تنها یک عدد را مشخص کرد که در این حالت رکورد شروع اولین رکورد موجود و تنها عدد (پارامتر) مشخص شده حداکثر تعداد رکوردها را تعیین می کند.
دو پارامتر این دستور در جاوی آن نوشته می شوند و با کاراکتر کاما , از یکدیگر جدا می شوند.
توجه: شروع رکوردها از صفر می باشد نه از 1.
در جدول persons چند رکورد دیگر نیز اضافه کردیم و در حال حاضر جدول ما شامل 5 رکورد می باشد. می خواهیم خواندن اطلاعات را بوسیله دستور LIMIT در دو حالت بررسی کنیم:
در حالت اول می خواهیم دو پارامتر را مشخص کنیم. خروجی ما از عدد 1 (دومین رکورد) شروع شده و تعداد 3 رکورد را می خوانیم (دومین تا پنجمین رکورد). کد این برنامه به شکل زیر است:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<?php $con = mysqli_connect("localhost", "root", "", "test_db"); $query = "SELECT name, age FROM persons LIMIT 1,3"; if(mysqli_connect_errno($con) > 0) echo "Can not connect to server:<br/>".mysqli_connect_error(); else{ $result = mysqli_query($con, $query); while($persons = mysqli_fetch_array($result)){ echo "'".$persons['name']."' is ".$persons['age']." years old<br/>"; } } mysqli_close($con); ?> |
خروجی:

در حالت دوم تنها یک پارامتر را تعیین می کنیم و این مقدار برابر با 3 است. پس سه رکورد ابتدایی جدول انتخاب خواهند شد.
پس کد درخواست ما به شکل زیر می باشد:
1 |
$query = "SELECT name, age FROM persons LIMIT 3"; |
خروجی:
مطالب واقعا مفید بود. ممنون
خواهش میکنم امیرجان. امیدوارم بتونیم مطالب مفیدتری روی سایت قرار بدیم.
اقا دست شما درد نکنه با اینک سالهاست SQl می شناسم با اینحال برای هر پروژه مجبور میشم دستورات بیاد بیارم و شما با نوشتن دستورات کمک زیادی می کنید باز هم متشکرم
خواهش میکنم نظر لطف شماست
خیلی ممنون، توضیحاتتون عالی بود.
خیلی ممنون خیلی چیزا یاد گرفتم