دستور ORDER BY در PHP چیست؟
هنگام کار با پایگاه داده، معمولاً اطلاعات را با دستورSELECT دریافت میکنیم. اما گاهی دادههای دریافتشده باید بر اساس یک ستون مشخص مرتب شوند.
برای مثال، ممکن است بخواهید کاربران را بر اساس نام، شناسه یا نام خانوادگی مرتب کنید. در این شرایط، عبارت ORDER BY در Query مربوط به پایگاه داده استفاده میشود.
نکته مهم این است که ORDER BY در اصل یک عبارت SQL است، نه یک دستور اختصاصی زبان PHP. در PHP میتوان Query مربوط به MySQL را اجرا کرد و نتیجه مرتبشده را دریافت و نمایش داد.
در این مقاله، با کاربرد ORDER BY، مرتبسازی صعودی و نزولی و استفاده از چند ستون آشنا میشویم.
کاربرد ORDER BY در SQL چیست؟
عبارت ORDER BY برای تعیین ترتیب نمایش رکوردهای خروجی یک Query استفاده میشود.
ساختار ساده آن به شکل زیر است:
SELECT * FROM user
ORDER BY name;
در این مثال، تمام رکوردهای جدول user دریافت میشوند و نتیجه بر اساس ستون name مرتب خواهد شد.
به صورت پیشفرض، مرتبسازی با ORDER BY به شکل صعودی انجام میشود.
برای دادههای عددی، صعودی معمولاً به معنی حرکت از عدد کوچکتر به عدد بزرگتر است.
برای دادههای متنی نیز ترتیب بر اساس قواعد مرتبسازی پایگاه داده انجام میشود.
مرتبسازی صعودی با ASC در SQL
برای مشخص کردن مرتبسازی صعودی میتوان از عبارت ASC استفاده کرد.
برای مثال:
SELECT * FROM user
ORDER BY id ASC;
در این Query، کاربران بر اساس مقدار id از کوچک به بزرگ نمایش داده میشوند.
نکته مهم این است که نوشتن id همیشه ضروری نیست؛ زیرا حالت پیشفرض ORDER BY معمولاً صعودی است.
بنابراین دو Query زیر از نظر جهت مرتبسازی معادل هستند:
SELECT * FROM user
ORDER BY id;
و:
SELECT * FROM user
ORDER BY id ASC;
استفاده از ASC میتواند خوانایی Query را بیشتر کند و قصد برنامهنویس را صریحتر نشان دهد.
مرتبسازی نزولی با DESC
اگر بخواهید اطلاعات از مقدار بزرگتر به کوچکتر مرتب شوند، باید از DESC استفاده کنید.
برای مثال:
SELECT * FROM user
ORDER BY id DESC;
در این حالت، رکوردها بر اساس id از بزرگ به کوچک مرتب میشوند.
فرض کنید شناسه کاربران به شکل زیر باشد:
|
ID |
Name |
|
5 |
Ali |
|
6 |
Mohsen |
|
7 |
Ali |
|
8 |
Amir |
|
9 |
Sina |
|
10 |
Ali |
اگر Query زیر اجرا شود:
SELECT * FROM user
ORDER BY id DESC;
نتیجه از 10 شروع شده و به 5 میرسد.
بنابراین:
ASC= صعودی
= DESC نزولی
این دو عبارت از مهمترین گزینهها هنگام مرتبسازی دادهها هستند.
مثال عملی ORDER BY در PHP و MySQL
برای استفاده از ORDER BY در یک پروژه PHP، ابتدا باید Query SQL را ایجاد و سپس آن را از طریق اتصال به پایگاه داده اجرا کنیم.
نمونه ساده:
$coo = mysqli_connect("localhost", "root", "", "school");
if (!$coo) {
die("Connection failed: " . mysqli_connect_error());
}
$query = "SELECT * FROM user ORDER BY name ASC";
$table = mysqli_query($coo, $query);
while ($rows = mysqli_fetch_assoc($table)) {
echo $rows['id'] . " - ";
echo $rows['name'] . " - ";
echo $rows['family'];
echo "
";
}
mysqli_close($coo);
?>
در این مثال، ابتدا با استفاده از mysqli_connect() به پایگاه داده متصل میشویم.
سپس Query زیر ایجاد میشود:
SELECT * FROM user ORDER BY name ASC
نتیجه Query با mysqli_query() دریافت میشود و با استفاده ازmysqli_fetch_assoc() رکوردها یکییکی خوانده میشوند.
مرتبسازی کاربران بر اساس نام
فرض کنید جدول user اطلاعات زیر را داشته باشد:
|
ID |
Name |
Family |
|
5 |
Ali |
Rezaei |
|
7 |
ali |
Moradi |
|
10 |
ali |
Rajaii |
|
8 |
Amir |
Aramiyan |
|
6 |
Mohsen |
Rajabli |
اگر Query زیر را اجرا کنیم:
SELECT * FROM user
ORDER BY name ASC;
رکوردها بر اساس ستون name مرتب میشوند.
نکته مهم این است که ترتیب دقیق حروف و نحوه مقایسه متن میتواند تحت تأثیر تنظیمات Collation
و پایگاه داده قرار گیرد. بنابراین در پروژههای واقعی، مخصوصاً هنگام کار با دادههای فارسی، باید تنظیمات کاراکتر و Collation نیز مورد توجه قرار گیرد.
مرتبسازی ID از بزرگ به کوچک
حالا فرض کنید هدف این باشد که جدیدترین یا بزرگترین شناسهها ابتدا نمایش داده شوند.
در این حالت میتوان نوشت:
SELECT * FROM user
ORDER BY id DESC;
خروجی میتواند به شکل زیر باشد:
|
ID |
Name |
Family |
|
10 |
Ali |
Rajaii |
|
9 |
Sina |
Astaneh |
|
8 |
Amir |
Aramiyan |
|
7 |
Ali |
Moradi |
|
6 |
Mohsen |
Rajabli |
|
5 |
Ali |
Rezaei |
در این Query، مقدار id به صورت نزولی مرتب شده است.
مرتبسازی بر اساس چند ستون با ORDER BY
یکی از قابلیتهای کاربردی ORDER BY امکان مرتبسازی بر اساس چند ستون است.
فرض کنید میخواهید ابتدا کاربران بر اساس نام و سپس بر اساس نام خانوادگی مرتب شوند.
میتوانید Query زیر را بنویسید:
SELECT * FROM user
ORDER BY name ASC, family ASC;
در این حالت، ابتدا ستون name معیار مرتبسازی قرار میگیرد.
اگر چند رکورد مقدار مشابهی در name داشته باشند، ستون family برای مرتبسازی آن رکوردها استفاده میشود.
این قابلیت در پروژههایی که اطلاعات زیادی دارند بسیار کاربردی است.
استفاده ترکیبی از ASC و DESC
لازم نیست جهت مرتبسازی تمام ستونها یکسان باشد.
برای مثال:
SELECT * FROM user
ORDER BY name ASC, id DESC;
در این Query، نامها به صورت صعودی مرتب میشوند.
سپس اگر چند رکورد نام یکسان داشته باشند، شناسه آنها از بزرگ به کوچک مرتب خواهد شد.
این روش کنترل بیشتری روی ترتیب خروجی Query ایجاد میکند.
ORDER BY همراه با WHERE
ORDER BY میتواند همراه با WHERE استفاده شود.
برای مثال:
SELECT * FROM user
WHERE id > 5
ORDER BY id DESC;
در این Query، ابتدا فقط رکوردهایی انتخاب میشوند که id آنها بیشتر از 5 است.
سپس همان رکوردها بر اساس id به صورت نزولی مرتب میشوند.
به زبان ساده:
WHERE ← انتخاب رکوردها
ORDER BY ← مرتبسازی رکوردهای انتخابشده
این ترکیب یکی از کاربردهای رایج SQL در پروژههای PHP و MySQL است.
ORDER BY همراه با LIMIT
گاهی فقط به چند رکورد اول نیاز داریم.
در چنین شرایطی میتوان ORDER BY را با LIMIT ترکیب کرد.
برای مثال:
SELECT * FROM user
ORDER BY id DESC
LIMIT 5;
این Query ابتدا کاربران را از نظر id به صورت نزولی مرتب میکند.
سپس فقط پنج رکورد اول را برمیگرداند.
این تکنیک در صفحات فهرست کاربران، نمایش آخرین مطالب، محصولات جدید و بسیاری از بخشهای دیگر وبسایت کاربرد دارد.
تفاوت ORDER BY و WHERE چیست؟
این دو عبارت وظایف متفاوتی دارند و نباید با یکدیگر اشتباه گرفته شوند.
|
کاربرد |
عبارت |
|
فیلتر کردن رکوردها |
WHERE |
|
مرتب کردن رکوردها |
ORDER BY |
|
محدود کردن تعداد رکوردهای خروجی |
LIMIT |
برای مثال:
SELECT * FROM user
WHERE id > 5
ORDER BY id DESC
LIMIT 3;
در این Query، ابتدا رکوردها فیلتر میشوند.
سپس بر اساس id مرتب میشوند.
در نهایت فقط سه رکورد اول خروجی داده میشوند.
اشتباهات رایج هنگام استفاده از ORDER BY
در ابتدای یادگیری SQL و PHP ممکن است چند اشتباه رایج رخ دهد.
اشتباه اول؛ تصور اینکه ORDER BY دستور PHP است
ORDER BY متعلق به SQL است.
PHP وظیفه اجرای Query و پردازش نتیجه را بر عهده دارد.
اشتباه دوم؛ فراموش کردن DESC
اگر هدف مرتبسازی نزولی باشد، باید DESC را مشخص کنید:
ORDER BY id DESC
اشتباه سوم؛ اشتباه گرفتن WHERE با ORDER BY
WHERE برای فیلتر کردن دادهها است.
ORDER BY برای تعیین ترتیب دادهها استفاده میشود.
اشتباه چهارم؛ مرتبسازی بدون توجه به نوع داده
مرتبسازی اعداد و متن میتواند نتایج متفاوتی ایجاد کند.
بنابراین نوع داده و تنظیمات پایگاه داده باید هنگام طراحی جدول مورد توجه قرار گیرند.
نکات مهم برای استفاده حرفهای از ORDER BY
برای استفاده بهتر از ORDER BY در پروژههای واقعی، چند نکته را در نظر داشته باشید:
• نام ستون مرتبسازی را دقیق انتخاب کنید.
• برای مرتبسازی نزولی از DESC استفاده کنید.
• برای مرتبسازی صعودی میتوانید ASC بنویسید.
• هنگام استفاده از چند ستون، اولویت ستونها را مشخص کنید.
• برای کاهش خروجیهای غیرضروری میتوانید LIMIT را به کار ببرید.
• هنگام ترکیب Query ها، ترتیب منطقی بخشهای SQL را رعایت کنید.
• در پروژههای بزرگ، عملکرد Query و ایندکسهای مناسب را نیز بررسی کنید.
جمعبندی؛ ORDER BY در PHP چه کاربردی دارد؟
ORDER BYیکی از عبارات مهم SQLبرای مرتبسازی دادهها است که در پروژههای PHP و MySQL کاربرد زیادی دارد.
با استفاده از آن میتوان اطلاعات را بر اساس یک یا چند ستون مرتب کرد. حالت پیشفرض مرتبسازی معمولاً صعودی است و با DESC توان ترتیب نزولی را مشخص کرد.
برای مثال:
ORDER BY name ASC
دادهها را بر اساس نام به صورت صعودی مرتب میکند.
در مقابل:
ORDER BY id DESC
رکوردها را بر اساس شناسه از بزرگ به کوچک نمایش میدهد.
همچنین میتوان ORDER BY را با عبارتهایی مانند WHERE و LIMIT ترکیب کرد و Query های کاربردیتری ساخت.
اگر در حال یادگیری PHP و MySQL هستید، تسلط بر Queryهای SQL مانند SELECT، WHERE، ORDER BY و یکی از پایههای مهم کار با پایگاه داده محسوب میشود.
یادگیری PHP را کاربردی شروع کنید
اگر میخواهید PHP را فقط بهصورت تئوری یاد نگیرید و با مفاهیمی مانند کار باMySQL ، Queryهای SQLو ساخت پروژههای واقعی آشنا شوید، در کارگاه آنلاین طراحی وب با PHP پژواک دانش شرکت کنید.
برای ثبتنام در کارگاه آنلاین طراحی وب باPHP ، اقدام کنید.