شما عضو این انجمن نبوده یا وارد نشده اید. لطفا برای مشاهده کامل انجمن و استفاده از آن وارد شوید یا ثبت نام کنید .
باشگاه کاربران روماک
استفاده از ORDER و GROUP در MySQL - نسخه‌ی قابل چاپ

+- باشگاه کاربران روماک (https://forum.romaak.ir)
+-- انجمن: انجمن طراحی سایت و برنامه نویسی (https://forum.romaak.ir/forumdisplay.php?fid=78)
+--- انجمن: دیتابیس (https://forum.romaak.ir/forumdisplay.php?fid=82)
+---- انجمن: MySql (https://forum.romaak.ir/forumdisplay.php?fid=84)
+---- موضوع: استفاده از ORDER و GROUP در MySQL (/showthread.php?tid=407)



استفاده از ORDER و GROUP در MySQL - saberi - ۹۴/۶/۲۳

در ادامه آموزش مقدماتی کار با php و mysql، نوبت به آشنایی با نحوه استفاده از دستورات  ORDER BY و GROUP BY رسیده است، با ذکر این مقدمه که دستورات ذکر شده در واقع با هدف دسته بندی و مرتب سازی دقیق تر نتایج و به دست آوردن مقادیر مورد نظر در هنگام کار با php و mysql ایجاد شده اند، به عبارتی دیگر، در برنامه نویسی کاربردی، مواردی پیش می آید که ناگزیریم اطلاعات را به صورت مرتب شده نشان دهیم، یا نتایج مشابه را در یک مورد خلاصه کنیم، اینجاست که کاربرد ORDER BY و GROUP BY رهگشای ما خواهد بود که در ادامه آموزش به آن خواهیم پرداخت.

دستور ORDER BY

همانطور که در مباحث گذشته از آموزش  مقدماتی MySQL به طور مختصر دیدیم، از ORDER BY در یک دستور SELECT * FROM استفاده می شود، هدف از به کاربردن آن، تفهیم نحوه مرتب سازی و چینش سلیقه ای و سفارشی نتایج و ردیف های درخواست شده از mysql است، به فرض اگر کاربرانی با مقادیر سنی متفاوت در سایت خود داشته باشیم و بخواهیم اسامی آنها را بر اساس سن مرتب کنیم، خواهیم نوشت:

*محتوای این قسمت تنها برای اعضای انجمن قابل مشاهده می باشد. *
خروجی کد بالا می تواند به فرض به شکل زیر باشد.

*محتوای این قسمت تنها برای اعضای انجمن قابل مشاهده می باشد. *

همانطور که ملاحظه می کنید، در مثال بالا از جدول table و دو ستون فرضی name و age استفاده کرده ایم.

استفاده از DESC، ASC و تابع rand

در حالت پیش فرض، mysql نتایج را به صورت صعودی (از کوچک به بزرگ یا Ascending) مرتب سازی می کند، اما مرتب سازی به صورت نزولی (از بزرگ به کوچک یا Descending) و همچنین مرتب سازی اتفاقی یا رندوم (Random) با افزودن عباراتی که در زیر مشاهده می کنید، امکان پذیر است.
DESC: مرتب سازی پیش فرض یا صعودی (از کوچک به بزرگ)
ASC: مرتب سازی نزولی (از بزرگ به کوچک)
rand: مرتب سازی به صورت اتفاقی (رندوم)
به مثال های زیر توجه کنید.
نحوه استفاده از DESC برای مرتب سازی و نمایش نتایج به صورت چینش صعودی:

*محتوای این قسمت تنها برای اعضای انجمن قابل مشاهده می باشد. *

نحوه استفاده از ASC برای مرتب سازی و نمایش نتایج به صورت چینش نزولی:

*محتوای این قسمت تنها برای اعضای انجمن قابل مشاهده می باشد. *
نحوه استفاده از تابع rand برای مرتب سازی و نمایش نتایج به صورت چینش اتفاقی:

*محتوای این قسمت تنها برای اعضای انجمن قابل مشاهده می باشد. *
استفاده از LIMIT

استفاده از دستور ORDER BY به تنهایی و بدون محدود کردن تعداد نتایج، می تواند منجر به نمایش تعداد خیلی زیادی از اطلاعات با یک درخواست از دیتابیس شود، از این رو یک پارامتر دیگر به نام LIMIT را می توانیم به دستور خود اضافه کنیم، LIMIT تعداد ردیف هایی را که به عنوان نتایج یک پرس و جو از دیتابیس به دست می آید، محدود می کند، به فرض دستور زیر:

*محتوای این قسمت تنها برای اعضای انجمن قابل مشاهده می باشد. *
تنها 5 کاربر را به صورت اتفاقی انتخاب می کند، همچنین می توان نقطه شروع انتخاب ردیف ها را نیز به mysql تفهیم کرد، بدین منظور برای LIMIT از دو عدد استفاده می کنیم، عدد اول مقادیر ردیفی است که با توجه به ORDER BY آن را انتخاب کرده ایم (به فرض شروع از سن 35 سال) و عدد دوم تعداد نتایجی است که پرس و جو را به آن محدود کرده ایم (به فرض 5 عدد).
*محتوای این قسمت تنها برای اعضای انجمن قابل مشاهده می باشد. *
با استفاده از این شیوه به صورت داینامیک، می توان قابلیت هایی مثل نمایش صفحه به صفحه مطالب را ایجاد نمود که در بحث آموزش های کاربردی در این باره خواهیم گفت.

استفاده از AND و OR

شیوه نگارش (syntax) دستورات php در هنگام کار با mysql این اجازه را به ما می دهد که همانند علامت های && و || از دو عبارت AND و OR در یک query استفاده کنیم، البته نحوه کاربرد آنها در اینجا کمی متفاوت است اما هدف از به کارگیریشان یکی است، از AND برای محدودتر و دقیق تر کردن نتایج و از OR برای وسیع تر کردن شمول نتایج یک پرس و جو استفاده می شود، به فرض اگر بخواهیم فقط کاربران دارای سن بالاتر از 40 و پائین تر از 20 را نمایش دهیم، می نویسیم:

*محتوای این قسمت تنها برای اعضای انجمن قابل مشاهده می باشد. *
دستور بالا، کاربرانی را که سن آنها بالاتر از 40 یا پائین تر از 20 باشد، در لیست نتایج پرس و جو از پایگاه داده نمایش می دهد.

استفاده از GROUP BY

یک قابلیت کاربردی دیگر که در دسته بندی و نمایش بهتر نتایج حاصل از پرس و جوی پایگاه داده می توان از آن استفاده کرد، قابلیت گروه بندی نتایج دارای وجه مشترک در یک نتیجه است، این قابلیت توسط پارامتر GROUP BY به دست می آید، به فرض اگر بخواهیم گروه بندی را بر اساس شهر کاربران داشته باشیم، خواهیم نوشت:

*محتوای این قسمت تنها برای اعضای انجمن قابل مشاهده می باشد. *
به این صورت از بین کاربران یک شهر، تنها یک عضو با توجه به نحوه چینش دستور ORDER BY انتخاب شده و در نتایج نشان داده می شود.

مثال دیگر از کاربرد GROUP BY در mysql:

*محتوای این قسمت تنها برای اعضای انجمن قابل مشاهده می باشد. *

در هنگام استفاده از قابلیت GROUP BY و ORDER BY باید دقت کنید که از آنها به ترتیب استفاده شود، در غیر اینصورت mysql خطای syntax را نمایش خواهد داد.

توابع مربوط به GROUP BY را در اصطلاح توابع تجمعی یا aggregate functions می گویند (شامل COUNT، MAX، MIN، SUM، AVG و...) که در آموزش های بعدی به تفصیل راجب آنها خواهیم گفت.